応用情報技術者 2011年 春期 午前2 問02
問題文
次の論理演算が成立するときに、[ a ]に入るビット列はどれか。ここで、⊕は排他的論理和を表す。
1101⊕0001⊕[ a ]⊕1101=1111
選択肢
ア:1011
イ:1100
ウ:1101
エ:1110(正解)
🔒 解説は解答すると表示されます
排他的論理和の逆算【午前2解説】
正解の理由
式を簡単にすると、同じビット列どうしの排他的論理和(XOR)は消える性質を利用できます。元の式
は
とでき、 なので
になります。よって
です。したがって選択肢の中では エ が正しいです。
解法ステップ
- XOR の基本性質を確認する:、結合法則と交換法則が成り立つ。
- 与式を同類項でまとめる: 。
- を適用して に変形。
- 両辺を と XOR して を得る。
選択肢別の誤答解説
- ア: 1011
直接代入して確認します。 は より となり、目的の になりません。従って不適。 - イ: 1100
同様に となり、 と一致しません。 - ウ: 1101
この場合は元式に が三回現れますが、XOR の性質上 (偶数回は消え、奇数回は残る)なので残りは で、やはり ではありません。 - エ: 1110
となり、与式を満たします。よって正解は エ です。
よくある誤解
- x⊕x⊕x = 0 と誤解することがあるが、実際は x⊕x⊕x = x(同じものの出現回数が奇数なら残り、偶数なら消える)。
- ビット毎のXORを十進数として扱って計算するミス。常に各ビットごとに演算すること。
- XOR を加算やビット反転(NOT)と混同するケース。XORは「等しいビットは0、異なるビットは1」を返す演算である。
補足コラム
XOR は暗号や誤り検出(パリティ)、ハッシュ関数の一部など幅広く使われます。方程式形式で a を求める場合、一般に
もし A ⊕ a = B なら a = A ⊕ B が成り立ちます。今回のように式中に同じ値が複数回出てくるときは、まず同じものをまとめて取り除くと式が大幅に簡単になります。
簡単な検算用 Python 例:
# 各値を整数にして XOR で検算
a_options = {
'ア': 0b1011,
'イ': 0b1100,
'ウ': 0b1101,
'エ': 0b1110
}
for label, val in a_options.items():
result = 0b1101 ^ 0b0001 ^ val ^ 0b1101
print(label, format(result, '04b'))
# 正しい選択肢は出力が '1111' になるもの
FAQ
Q: なぜ 1101 が二回あると消せるのですか?
A: XOR の性質で同じビット列を二回 XOR すると 0 になるためです()。
A: XOR の性質で同じビット列を二回 XOR すると 0 になるためです()。
Q: 順序を入れ替えても結果は同じですか?
A: はい。XOR は交換法則・結合法則が成り立つため、順序に依存しません。
A: はい。XOR は交換法則・結合法則が成り立つため、順序に依存しません。
Q: 複数回出現する場合の扱いは?
A: 同じ値が偶数回出現すれば消え、奇数回出現すれば1回分が残ります(例えば3回なら1回分残る)。
A: 同じ値が偶数回出現すれば消え、奇数回出現すれば1回分が残ります(例えば3回なら1回分残る)。
関連キーワード: 排他的論理和, XOR, ビット演算, パリティ, 二進数

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

