オリジナル模擬試験1 問2
問2解説へ
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)の時にそれぞれどのような結果になるのかを示しておきます。実際の計算結果からも、16の倍数の時に結果が0、余りが出る値では結果が1以上となる「ア」の演算が正しいことがわかります。
符号なし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)の時にそれぞれどのような結果になるのかを示しておきます。実際の計算結果からも、16の倍数の時に結果が0、余りが出る値では結果が1以上となる「ア」の演算が正しいことがわかります。
広告