No.69 8ビットで表される符号なし2進数xが16の倍数であるかどうかを調べる方法として,適切なものはどれか。
⭕️
❌
💾
🖊 | ☑️ |
⭕️ | [[ AnswerCalc[0] ]] % | A | [[ AnswerCalc[1] ]] |
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以上となる「ア」の演算が正しいことがわかります。
💾
✔️
[[ d.CommentTxt ]] |
< | > |
🥇 |