基本情報技術者 2019年 春期 午前(科目A) 問02
問題文
最上位をパリティビットとする8ビット符号において、パリティビット以外の下位7ビットを得るためのビット演算はどれか。
選択肢
ア:16進数0FとのANDをとる。
イ:16進数0FとのORをとる。
ウ:16進数7FとのANDをとる。(正解)
エ:16進数FFとのXOR(排他的論理和)をとる。
🔒 解説は解答すると表示されます
パリティ付き8ビット符号の下位7ビット抽出【午前解説】
正解の理由
正解は ウ です。理由はマスクとANDの性質によります。下位7ビットだけを取り出すには、取り出したいビット位置に1を、消したい(最上位)ビットに0を置いたビットマスクを用意し、元の値とAND演算を取ります。
具体的には で、任意の8ビット値 に対して を行うと最上位ビットだけが0になり、下位7ビットはそのまま得られます。例: 。
具体的には で、任意の8ビット値 に対して を行うと最上位ビットだけが0になり、下位7ビットはそのまま得られます。例: 。
解法ステップ
- 問題のビット位置を確認:最上位(MSB)がパリティで、残り7ビットを取得したい。
- 取り出したいビットに1、消したいビットに0を置いたマスクを作成:。
- マスクの16進表記を求める:。
- AND 演算を適用:元のバイト を実行して下位7ビットを得る。
選択肢別の誤答解説
- ア: 16進数0FとのANDをとる。
- 0x0F = で、 AND すると下位4ビットしか残らず下位7ビットは得られない。
- イ: 16進数0FとのORをとる。
- OR は対象ビットを1にする操作。下位4ビットを1にしてしまい元の下位7ビットを取り出す目的に合わない。
- ウ: 16進数7FとのANDをとる。
- 0x7F = で、最上位のみクリアし下位7ビットをそのまま残すため正解。
- エ: 16進数FFとのXOR(排他的論理和)をとる。
- 0xFF = を XOR すると全ビットが反転されるだけで、下位7ビットを抽出する操作にはならない。
正解: ウ
よくある誤解
- 0x0F と AND をとれば下位7ビットが得られると誤解する(実際は下位4ビットしか残らない)。
- XOR や OR を使えば「消せる」と思い込む(XOR は反転、OR は1にセットするだけで元に戻せない)。
- 「最上位」がどちらか(MSB/LSB)を混同してマスク位置を間違える。
補足コラム
- マスクの一般式: 「下位 n ビットを取り出すマスク」は で求められます。今回なら 。
- 実装例(Python):
x = 0xAB # 例: 0xAB = 0b10101011
lower7 = x & 0x7F # 下位7ビットを抽出
print(hex(lower7)) # -> 0x2b
- パリティビットの位置が LSB の場合はマスクを変える必要があります(例: 最下位を除く場合は別操作)。
FAQ
Q1: なぜ AND を使うのですか?
A1: AND はマスクの1の位置を保持し0の位置をクリアするため、特定ビットだけを抽出するのに最適です。
A1: AND はマスクの1の位置を保持し0の位置をクリアするため、特定ビットだけを抽出するのに最適です。
Q2: XOR で0にできませんか?
A2: XOR は対象ビットを反転するだけで、常に0にするには元のビットが1か0かで結果が異なり目的に合致しません。
A2: XOR は対象ビットを反転するだけで、常に0にするには元のビットが1か0かで結果が異なり目的に合致しません。
Q3: マスクを計算する簡単な方法は?
A3: 「下位 n ビットなら (1<<n)-1」を使います。下位7ビットなら (1<<7)-1 = 127 = 0x7F。
A3: 「下位 n ビットなら (1<<n)-1」を使います。下位7ビットなら (1<<7)-1 = 127 = 0x7F。
関連キーワード: ビット演算、ビットマスク、パリティビット、0x7F、AND、MSB、下位ビット抽出、マスク生成、2進数表現、バイナリ演算

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

