基本情報 令和元年度 秋期 問2:テクノロジ系に関する問題
8ビットの値の全ビットを反転する操作はどれか。
- a16 進表記 00 のビット列と排他的論理和をとる。
- b16 進表記 00 のビット列と論理和をとる。
- c16 進表記 FF のビット列と排他的論理和をとる。正答
- d16 進表記 FF のビット列と論理和をとる。
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは c「FF とXOR」 です。
8bitを全部反転するには:
- FF(2進1111 1111)とXORを取る。
- XORは「違うなら1、同じなら0」になるルールなので、1とXORすれば必ず逆になる!
```
X X X X X X X X
XOR 1 1 1 1 1 1 1 1
───────────────
¬X ¬X ¬X ¬X ¬X ¬X ¬X ¬X ← 全反転!
```
👉 覚え方:全反転=FFとXOR。
ほかの選択肢:a 00XOR=何も変わらない/b 00OR=何も変わらない/d FF OR=全部1になる。
なぜこれが正解か
正解は c。FF(1111 1111)とXORを取ると、各ビットが反転する。XORの性質「`X XOR 1 = ¬X`」「`X XOR 0 = X`」より、1とXORしたビットは反転し、0とXORしたビットはそのまま。FF(全ビット1)とXORすると全ビットが反転する。
各選択肢の解説
- a 00とXOR:`X XOR 0 = X`なので変化なし。
- b 00とOR:`X OR 0 = X`なので変化なし。
- d FFとOR:`X OR 1 = 1`なので全ビット1になり、元の情報が失われる。
覚え方・ひっかけ注意
ビット演算の早見表:
| 操作 | 効果 |
|---|---|
| AND 0 | 0クリア |
| AND 1 | そのまま |
| OR 0 | そのまま |
| OR 1 | 1セット |
| XOR 0 | そのまま |
| XOR 1 | 反転 |
「反転=XOR 1」が暗記必須のセオリー。NOT演算(ビット反転)はC言語の `~` 演算子に相当。
理論的背景
XOR(排他的論理和)の性質:
- 可換性:`A XOR B = B XOR A`
- 結合性:`(A XOR B) XOR C = A XOR (B XOR C)`
- 恒等元:`A XOR 0 = A`
- 自己反元:`A XOR A = 0`
- 反転:`A XOR 1 = ¬A`
これらの性質から、XORは自己逆元演算であり、2回適用すると元に戻る(`A XOR B XOR B = A`)。この特性は暗号、誤り検出、データ復元など多方面で活用される。
実務での使われ方
- 暗号:XOR暗号、ワンタイムパッド(情報理論的に最強の暗号)、ストリーム暗号(ChaCha20、RC4)
- 誤り検出:CRC、パリティビット
- RAID 5/6:データブロックのXORでパリティ生成、ディスク障害時に復元
- 画像処理:マスク反転、差分計算
- データ復元:A XOR B = C、A XOR C = B で任意の1つを復元可能
- swap最適化:一時変数なしの値交換(`a = a XOR b; b = a XOR b; a = a XOR b;`)
- 競技プログラミング:配列の重複検出(XORすべて取ると1個だけ残る数が浮かぶ)
NOTとの関係
2の補数表現での負数化(`-X`)は、ビット反転+1で得られる:
```
-X = ¬X + 1 = (X XOR 0xFF) + 1 // 8bitの場合
```
これにより整数加減算で減算は加算で処理可能。
試験での位置づけ
基本情報の基礎理論・コンピュータシステム分野で必出。論理回路(半加算器・全加算器のXOR応用)、暗号(XOR ベース)、エラー検出符号(パリティ、ハミング距離)など複数分野の基盤。
選択肢の発展補足
ORの「セット(1にする)」、ANDの「クリア(0にする)」、XORの「反転」をビットマスク3兄弟として理解すると、組込みプログラミングや低レベル最適化で頻繁に使う以下のイディオムが直感的に書ける:
```c
flags |= MASK; // 特定bitセット
flags &= ~MASK; // 特定bitクリア
flags ^= MASK; // 特定bit反転(トグル)
if (flags & MASK) // 特定bit検査
```
これらは試験のプログラム読解(科目B)でも頻繁に出題されるパターン。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 令和元年度 秋期 問2/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。