平成18年秋期試験問題 午前問3

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
8ビットで表される符号なし2進数xが16の倍数であるかどうかを調べる方法として,適切なものはどれか。

  • x と2進数 00001111 のビットごとの論理積をとった結果が0である。
  • x と2進数 00001111 のビットごとの論理和をとった結果が0である。
  • x と2進数 11110000 のビットごとの論理積をとった結果が0である。
  • x と2進数 11110000 のビットごとの論理和をとった結果が0である。
正解 問題へ
分野:テクノロジ系
中分類:基礎理論
小分類:離散数学
解説
16の倍数ということは、xを16で割った時に余りが0になればよいわけです。
符号なし2進数では、最下位ビットから 1, 2, 4, 8, 16, 32, 64, 128…と各ビットが値をもっていて、最下位ビットから5ビット目以降はすべて16の倍数になっていることがわかります。つまり下位4ビットがすべて0であれば、xは16の倍数と判断できます。

あるビット列から任意の部分のビットを取り出したいときには、AND演算を使います。具体的には、取り出したい位置のビットを1、それ以外を0としたマスクビット列との論理積をとります。
この問題では、8ビットで表されるビット列の中で、下位4ビットの値をチェックしたいので、上位4ビット 0000 、下位4ビット 1111であるマスクビットと論理積を取り、取り出した下位4ビットの値が 0であれば、16の倍数であると判断できることになります。

下図に例としてすべての操作が、ビット列が16の倍数(ex.96)とそれ以外(ex.90)の時にそれぞれどのような結果になるのかを示しておきます。
03.png
実際の計算結果からも、16の倍数の時に結果が0、余りが出る値では結果が1以上となる「ア」の演算が正しいことがわかります。

Pagetop