基本情報技術者 2016年 秋期 午前(科目A) 問01
問題文
8ビットのビット列の下位4ビットが変化しない操作はどれか。
選択肢
ア:16進表記OFのビット列との排他的論理和をとる。
イ:16進表記OFのビット列との否定論理積をとる。
ウ:16進表記OFのビット列との論理積をとる。(正解)
エ:16進表記OFのビット列との論理和をとる。
下位4ビットが変化しない操作はどれか【午前2 解説】
要点まとめ
- 結論:16進表記0F()との論理積(AND)をとる操作は下位4ビットをそのまま残すため正解です。
- 根拠:ANDはマスクの1の位置のビットを保持し0の位置を0にするため、マスクが下位4ビット1なら下位4ビットは変化しません。
- 差がつくポイント:マスクの1/0の意味を即座に二進数で把握できるか、XOR/OR/否定論理積(NAND)の作用を混同しないかが合否を分けます。
正解の理由
正解は ウ(16進表記OFのビット列との論理積をとる)。
ここで「16進表記OF」は通常 (2進で )と解釈します。論理積(AND) はマスクの1になっている下位4ビットだけを保持し、各ビットについて
ここで「16進表記OF」は通常 (2進で )と解釈します。論理積(AND) はマスクの1になっている下位4ビットだけを保持し、各ビットについて
- マスクが1の位置:結果ビット = 入力ビット(保持)
- マスクが0の位置:結果ビット = 0(上位4ビットは0になる) したがって下位4ビットの値はそのまま残り「変化しない」と言えます。
よくある誤解
- XOR(排他的論理和)は「1のところで反転」するため下位4ビットが変化するのに注意。
- ORはマスクの1で強制的に1にするため、下位4ビットがすべて1に変わり保持とはならない。
- 「否定論理積(NAND)」はANDの否定なので下位4ビットを反転し、上位は常に1になり下位が変わるため誤り。
解法ステップ
- マスク(OF)が何を表すか確認:(下位4ビットが1)。
- 各論理演算のビットごとの作用を思い出す:AND(保持/クリア)、OR(設定)、XOR(反転)、NAND(ANDの否定)。
- マスクの1の位置で「保持」になるのはANDのみであることを確認する。
- よって「論理積(AND)」を選ぶ。
選択肢別の誤答解説
- ア: 16進表記OFのビット列との排他的論理和をとる。
- XORはマスクの1の位置で入力ビットを反転するため下位4ビットは変化します。誤り。
- イ: 16進表記OFのビット列との否定論理積をとる。
- NAND は のため、マスク1の位置で入力を反転し、マスク0の位置は常に1になります。下位4ビットは変わるため誤り。
- ウ: 16進表記OFのビット列との論理積をとる。
- AND はマスク1の位置のビットをそのまま残すので下位4ビットは変化しません。正解です。
- エ: 16進表記OFのビット列との論理和をとる。
- OR はマスク1の位置を強制的に1にするため、下位4ビットが1に変化してしまいます。誤り。
補足コラム
- マスク処理の基本:特定ビットを「取り出す(AND)」「立てる(OR)」「反転する(XOR)」の3パターンは頻出です。試験ではまず16進数を2進数で見てマスクがどのビットに効くかを確認すると速いです。
- 表記の注意:「OF」は文脈上 のことですが、0(ゼロ)とO(オー)の誤読に注意してください。正しくは 0F = 00001111₂ です。
- 実務ではNAND単体よりAND/NOTを組み合わせることが多く、問題文で「否定論理積」と書かれたらNANDを想定します。
FAQ
Q: なぜANDで上位4ビットは0になるが「下位4ビットが変化しない」と言えるのですか?
A: 質問は「下位4ビットが変化しない操作はどれか」が趣旨で、ANDは下位4ビットの値をそのまま保持します。上位4ビットが0になることは条件に含まれません。
A: 質問は「下位4ビットが変化しない操作はどれか」が趣旨で、ANDは下位4ビットの値をそのまま保持します。上位4ビットが0になることは条件に含まれません。
Q: マスクが1の部分で「保持」とはどういう意味ですか?
A: ビットごとのANDでマスク側が1なら結果は元のビット値そのもの(0か1)になり、値が変わらないことを指します。
A: ビットごとのANDでマスク側が1なら結果は元のビット値そのもの(0か1)になり、値が変わらないことを指します。
Q: 実際に確認したいときの簡単なPython例は?
A: 以下のように動作を確認できます。
A: 以下のように動作を確認できます。
x = 0b10100110 # 例:0xA6 mask = 0x0F # 0b00001111 print(bin(x & mask)) # 論理積:下位4ビットを保持 print(bin(x ^ mask)) # 排他的論理和:下位4ビットを反転 print(bin(x | mask)) # 論理和:下位4ビットが1になる
関連キーワード: ビットマスク、下位4ビット、論理積、AND、排他的論理和、XOR、論理和、OR、否定論理積、NAND、16進数、0F、マスク処理

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

