基本情報技術者 2019年 秋期 午前(科目A) 問02
問題文
8ビットの値の全ビットを反転する操作はどれか。
選択肢
ア:16進表記00のビット列と排他的論理和をとる。
イ:16進表記00のビット列と論理和をとる。
ウ:16進表記FFのビット列と排他的論理和をとる。(正解)
エ:16進表記FFのビット列と論理和をとる。
8ビットの値の全ビットを反転する操作はどれか。【午前2 解説】
正解の理由
16進表記FFは8ビットで1111 1111を表します。XOR(排他的論理和)は対応するビットが同じなら0、異なれば1を返すため、任意の8ビット値Vに対して
すなわち全ビットの反転(ビット反転、ビット補数)になります。よって「ウ: 16進表記FFのビット列と排他的論理和をとる」が正解です。
解法ステップ
- 問題の要求を確認:8ビットの全ビットを反転する操作を探す。
- 各選択肢のビットパターンを理解:00は0000 0000、FFは1111 1111。
- ビット演算の性質を適用:XORは同値で0、非同値で1、ORは1を優先、ANDは0を優先。
- 演算ごとの結果を検算:
- (変化なし)
- (変化なし)
- (反転)
- (全1に固定)
- 反転になるのは3番目のみと判定して選択。
選択肢別の誤答解説
- ア: 16進表記00のビット列と排他的論理和をとる。
00は0000 0000なのでXORしても元の値が変わらず反転にはならない。 - イ: 16進表記00のビット列と論理和をとる。
ORでも0000 0000は影響を与えず元の値を保つため反転ではない。 - ウ: 16進表記FFのビット列と排他的論理和をとる。
正解。1111 1111とのXORは各ビットを反転するため目的を満たす。 - エ: 16進表記FFのビット列と論理和をとる。
ORすると常に1111 1111(FF)になり元値の反転ではなく全ビットが1に固定される。
よくある誤解
- 誤解1: 「00とXORすれば反転する」
実際は00は0000 0000なので 、値は変わりません。反転はしません。 - 誤解2: 「FFと論理和(OR)なら反転される」
ORは1があれば1になるため となり常に全1になってしまい反転ではありません。 - 誤解3: AND演算の混同
AND(論理積)はビットを0にできるが、反転操作には使えません(例:)。
補足コラム
- ビット反転の用途:マスク処理、ビット演算による符号反転やビットフラグの反転などで使われます。C言語などではビット反転を ~ 演算子で表すことが多いですが、限定ビット幅(例:8ビット)で扱う場合はマスク(0xFF)を併用して上位ビットの影響を遮断します。例:
(~v) & 0xFFは8ビット反転を確実に行います。 - XORの性質:任意のAに対して A ⊕ A = 0、A ⊕ 0 = A、演算は可換・結合であるためビット操作で便利です。
FAQ
Q1: 16進表記FFは常に8ビットを指しますか?
A1: 文脈で「8ビットの値」と明示されている場合はFFは8ビットの1111 1111を指します。より大きなビット幅ではFFは下位8ビットが1であることを意味します。
A1: 文脈で「8ビットの値」と明示されている場合はFFは8ビットの1111 1111を指します。より大きなビット幅ではFFは下位8ビットが1であることを意味します。
Q2: 反転をC言語で簡単に書くには?
A2: 8ビット変数uint8_t vなら
A2: 8ビット変数uint8_t vなら
v ^ 0xFF または ~v(ただし型幅に注意)を使います。上位ビットをクリアしたければ (~v) & 0xFF を使います。Q3: XORで特定ビットだけ反転できますか?
A3: はい。反転したいビット位置だけ1にしたマスクをXORすればそのビットだけ反転できます(例:第2ビットを反転するには
A3: はい。反転したいビット位置だけ1にしたマスクをXORすればそのビットだけ反転できます(例:第2ビットを反転するには
v ^ 0x04)。関連キーワード: ビット演算、XOR、マスク、ビット反転、論理和、論理積、符号操作、8ビット演算

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

