基本情報技術者 2014年 春期 午前(科目A) 問02
問題文
最上位をパリティビットとする8ビット符号において、パリティビット以外の下位7ビットを得るためのビット演算はどれか。
選択肢
ア:16進数0FとのANDをとる。
イ:16進数0FとのORをとる。
ウ:16進数7FとのANDをとる。(正解)
エ:16進数FFとのXOR(排他的論理和)をとる。
🔒 解説は解答すると表示されます
パリティ付き8ビット符号の下位7ビット抽出【午前解説】
正解の理由
正解: ウ
8ビット値 x の最上位(MSB)を0にして下位7ビットだけを取得するには、ビットマスクで上位ビットを0にする必要があります。16進数で 0x7F は2進数で です。AND 演算 を行うと、マスクの1の位置(下位7ビット)はそのまま保持され、マスクの0の位置(最上位)は強制的に0になります。これにより下位7ビットを得られます。
解法ステップ
- 「最上位をパリティビットとする」→ MSB を取り除き下位7ビットを取り出す必要があると理解する。
- 目的:MSB を 0 にして下位7ビットを保持するビットマスクを選ぶ。
- 下位7ビットを1、上位1ビットを0にするマスクは 0x7F()であると確認する。
- AND 演算を適用:結果 = 元の値 0x7F。
選択肢別の誤答解説
- ア: 16進数0FとのANDをとる。
- 0x0F = であり、ANDすると下位4ビットしか保持されません。下位7ビットを得る目的に合いません。
- イ: 16進数0FとのORをとる。
- OR はマスクの1の部分を強制的に1にします。0x0F と OR すると下位4ビットが1になり、元の下位ビットの値そのままではなくなります。
- ウ: 16進数7FとのANDをとる。
- 0x7F = で、AND により上位ビットが0になり下位7ビットが保持されるため正解です。
- エ: 16進数FFとのXOR(排他的論理和)をとる。
- 0xFF = と XOR すると全ビットが反転(NOT 相当)します。下位7ビットをそのまま取り出す操作ではありません。
よくある誤解
- 「0x0Fで十分」と考える誤解:0x0F(00001111)だと下位4ビットしか残らず、7ビットは得られません。
- 「ORやXORでも同じ」と誤認する点:ORは1を強制的に立て、XORはビットを反転するため、元の下位7ビットをそのまま取り出す目的には不適です。
- ビッグエンディアン/リトルエンディアン混同:エンディアンはバイト順序の問題であり、同一バイト内のビットマスク操作には影響しません(MSB/LSB の意味を混同しないこと)。
補足コラム
- マスクの考え方:ビット操作で特定のビット列を取り出す・消すにはAND(クリア)、OR(セット)、XOR(反転)の違いを押さえることが重要です。
- 表記上の注意:16進数表記は 0x7F のように表し、2進数表記は のように示すと視覚的に理解しやすいです。
- 実務では、パリティビットを除去してデータ部分だけを処理する場面があるため、マスクの選び方を正確にすることが求められます。
FAQ
Q: AND と OR の違いを短く教えてください。
A: AND はマスクの0でビットを0にし1で元の値を保持、OR はマスクの1でビットを1にし0で元の値を保持します。
A: AND はマスクの0でビットを0にし1で元の値を保持、OR はマスクの1でビットを1にし0で元の値を保持します。
Q: XOR はいつ使いますか?
A: XOR はマスクで1の位置のビットを反転します。変化を加えたいときやビットフラグの切替に使いますが、取り出しには使いません。
A: XOR はマスクで1の位置のビットを反転します。変化を加えたいときやビットフラグの切替に使いますが、取り出しには使いません。
Q: 実際のコード例は?
A: 例えば Python なら次のように書きます。
A: 例えば Python なら次のように書きます。
x = 0b10110110 # 例: 8ビットの値(MSBはパリティビット)
lower7 = x & 0x7F
print(bin(lower7)) # 下位7ビットが得られる
関連キーワード: ビットマスク、パリティビット、AND演算、XOR、OR、16進数、2進数、ビット操作、MSB、LSB

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

