平成18年 秋期 基本情報技術者 午前 問1

1バイトのデータで0のビット数と1のビット数が等しいもののうち、符号なしの2進整数としてみたとき最大となるものを、10整数で表したものはどれか。

 ア  120  イ  127  ウ  170  エ  240


答え エ


解説
1バイトは8ビット(どこにも書いてないけど「0のビット数と1のビット数が等しい」と書いてあるから偶数なので1バイトは8ビットとします。)なので、求めるデータはビットで書くと0の数が4個と1の数が4個になります。

例)1バイトのデータをビットで表す方法を(b7 b6 b5 b4 b3 b2 b1 b0)とすると、求めるデータは(00001111)、(01010101)、(11110000)等になります。
また、ここでは(b7 b6 b5 b4 b3 b2 b1 b0)の左側を上位ビット、右側を下位ビットと呼び、b7を最上位ビット、b0を最下位ビットと呼びます。

この中で最も大きいもので探すわけですが、ここで注意が必要なのは『符号付』か『符号なし』かです。問題文に『符号なし』となっていますので最上位ビット(b7)は1としてよいことがわかります。すなわち求めるデータは(1xxxxxxx)になります。

あとは、最も大きいですから上位ビットを1に下位ビットを0にして求めるデータは(11110000)になります。
これを10進数にするには各ビットの値を足算すれば求められるので、b7=128、b6=64、b5=32、b4=16、b3=8、b2=4、b1=2、b0=1ですから、(11110000)で1となっているビットを足します。
 (11110000)=b7+b6+b5+b4=128+64+32+16=240
(エ)になります。


もし、問題が『符号付』の場合、最上位ビット(b7)は正負を表す符号で、0が正、1が負になるので求めるデータはb7が0になりb6からb3までの4ビットが1になります。
(01111000)=b6+b5+b4+b3=64+32+16+8=120になります。


キーワード
・バイトとビット
・符号付と符号なし

キーワードの解説
  • バイト(byte)とビット(bit)
    特に何も書いていなければ、1バイト=8ビットである。
    シリアルの通信(RS-232Cなど)では1バイトが7ビットの場合もある。
  • 符号付と符号なし
    データのうち最上位のビットを符号(0:正、1:負)とするのが符号付で、最上位ビットもデータとして使用するのが符号なしです。
    8ビット(1バイト)の場合
     符号付1バイトのデータの範囲は、-128〜127
     符号なし1バイトのデータの範囲は、0〜255
    になります。(特に記述が無い場合、符号付の数は2の補数で考えます。)

もっと、「バイトとビット」について調べてみよう。

戻る 一覧へ 次へ