離散数学 (全109問中74問目)
No.74
8ビットで表される符号なし2進数xが16の倍数であるかどうかを調べる方法として,適切なものはどれか。
出典:平成18年秋期 問3
- 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以上となる「ア」の演算が正しいことがわかります。