ITパスポート 2018年 秋期 問79
問題文
8ビットの2進データXと00001111について、ビットごとの論理積をとった結果はどれか。ここでデータの左方を上位、右方を下位とする。
選択肢
ア:下位4ビットが全て0になり、Xの上位4ビットがそのまま残る。
イ:下位4ビットが全て1になり、Xの上位4ビットがそのまま残る。
ウ:上位4ビットが全て0になり、Xの下位4ビットがそのまま残る。(正解)
エ:上位4ビットが全て1になり、Xの下位4ビットがそのまま残る。
🔒 解説は解答すると表示されます
8ビットデータXと00001111の論理積の結果は?【ITパスポート 解説】
正解の理由
ビットごとの論理積(AND、英: AND = 「かつ」)は、対応する両方のビットが1のときだけ結果が1になります。ビット(0または1の情報の最小単位)で考えると、マスクの値 00001111 は上位4ビットが0、下位4ビットが1です。したがって、Xと00001111の論理積をとると、上位4ビットはすべて0になり、下位4ビットだけが元のXの値をそのまま残します。よって選択肢の中では ウ が正しい説明です。
解法ステップ
- まずマスク 00001111 の意味を確認します。左(上位)4ビット = 0、右(下位)4ビット = 1。
- 論理積 AND の規則を確認します。
- 1 AND 1 = 1
- 1 AND 0 = 0
- 0 AND 1 = 0
- 0 AND 0 = 0
- X の各ビットと対応するマスクのビットをANDします。
- 上位4ビットは X の何が来ても 0 AND x = 0 なので結果は0。
- 下位4ビットは X のビットと 1 AND x = x なので元の値がそのまま残る。
- まとめ:結果は上位4ビットが0、下位4ビットが X の下位4ビット。
具体例:
- X = 10110010 のとき:
- マスク = 00001111
- 結果 = 00000010(下位4ビット 0010 が残る)
式で書くと (xxxx は X の下位4ビット)。
選択肢別の誤答解説
- ア: 「下位4ビットが全て0になり、Xの上位4ビットがそのまま残る。」
- これはマスクが11110000の場合の結果です。今回のマスクは逆なので誤りです。
- イ: 「下位4ビットが全て1になり、Xの上位4ビットがそのまま残る。」
- AND演算では0で上書きされた部分は1にはなりません。下位がすべて1になるのは OR 演算や直接代入の誤解です。
- ウ: 「上位4ビットが全て0になり、Xの下位4ビットがそのまま残る。」
- 正しい。マスク00001111は下位4ビットを抽出するための典型的な「マスク(mask:一部取り出すためのビットパターン)」です。
- エ: 「上位4ビットが全て1になり、Xの下位4ビットがそのまま残る。」
- 上位を1にするには OR 演算で1を与えるなど別の操作が必要です。ANDでは0があれば0になります。
よくある誤解
- 「左が上位・右が下位を逆に考える」
- 問題文で左を上位、右を下位と明示されています。これを逆にすると結果の判断を誤ります。
- 「ANDで0は保持されると思う」
- AND は0 と何か = 0 なので、0を掛け合わせる(ANDする)と元のビットは消えます。0は“消す”働きがあります。
- 「1が入っている方が0になる」
- 1は保持(1 AND x = x)ではなく、1と対応する相手が0なら結果は0になります。相互関係を忘れると間違えます。
補足コラム
- マスク(mask)とは:特定のビットだけを取り出したり消したりするためのビット列です。今回の 00001111 は「下位4ビットを取り出す」ためのマスクです。
- ニブル(nibble):4ビットの塊を指す英語の俗語で、バイト(8ビット)の半分という意味です。今回の問題は「下位ニブルを取り出す」操作と言えます。
- 実務での利用例:ファイル形式やプロトコルで特定のフラグ(状態)だけを取り出すときに使います。例えば「あるバイトの上位4ビットに種類コード、下位4ビットに状態コードが入っている」場合、下位4ビットだけを取りたいときに今回のようなマスクを使います。
FAQ
Q. マスクが11110000ならどうなりますか?
A. その場合は上位4ビットをそのまま残し、下位4ビットが0になります。ANDの性質を当てはめればすぐわかります。
A. その場合は上位4ビットをそのまま残し、下位4ビットが0になります。ANDの性質を当てはめればすぐわかります。
Q. AND と OR の違いを簡単に教えてください。
A. AND(論理積)は両方が1のときだけ1。OR(論理和)はどちらか一方が1なら1になります。ANDは「両方必要」、ORは「どちらかで良い」というイメージです。
A. AND(論理積)は両方が1のときだけ1。OR(論理和)はどちらか一方が1なら1になります。ANDは「両方必要」、ORは「どちらかで良い」というイメージです。
Q. 実際にプログラムで確かめる方法は?
A. 簡単なPythonコードで確認できます。例えば:
A. 簡単なPythonコードで確認できます。例えば:
X = 0b10110010
mask = 0b00001111
result = X & mask
print(format(X, '08b')) # '10110010'
print(format(mask, '08b')) # '00001111'
print(format(result, '08b')) # '00000010'
関連キーワード: ビット演算、論理積、マスク、下位ビット、上位ビット、ニブル、AND演算、バイナリ、バイナリマスク、ビット抽出

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

