最終更新日:2026年8月2日
fe fe-technology algorithm
まず結論
ビット演算は、ビット列を1桁ずつ見て、0と1を操作する計算です。
基本情報技術者試験では、AND、OR、XOR、NANDを次のように切り分けると分かりやすいです。
| 演算 | 試験での見方 |
|---|---|
| AND(論理積) | 特定のビットだけ残す |
| OR(論理和) | 特定のビットを1にする |
| XOR(排他的論理和) | 特定のビットを反転する |
| NAND(否定論理積) | ANDの結果を反転する |
特に、XORには次の性質があります。
A XOR B = C
A = B XOR C
B = A XOR C
つまり、3つのうち2つが分かれば、残り1つをXORで逆算できます。
残すならAND、1にするならOR、反転・逆算ならXOR。
直感的な説明
ANDは、ビット列にかぶせる 穴あきシート のようなものです。
例えば、8ビットのうち下位4ビットだけを見たいとします。
元のビット列:1010 0110
残したい範囲:0000 1111
ここで、0000 1111 とANDを取ります。
1010 0110
AND 0000 1111
= 0000 0110
上位4ビットは 0 とANDするので消えます。
下位4ビットは 1 とANDするので元のまま残ります。
0 AND 何か = 0
1 AND 何か = 何かが残る
一方、XORは「反転スイッチ」のように考えられます。
0 と XOR
→ 元のまま
1 と XOR
→ 0と1が反転する
さらに、同じ値をもう一度XORすると、元に戻ります。
A XOR B XOR B = A
そのため、XORは反転だけでなく、不明な値を逆算するときにも使えます。
定義・仕組み
ビット演算では、2つのビットを対応する位置ごとに計算します。
まず、基本の真理値表を押さえます。
| 入力A | 入力B | AND | OR | XOR | NAND |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 | 0 |
それぞれの意味は、次のように考えると覚えやすいです。
| 演算 | 直感 | 例 |
|---|---|---|
| AND | 両方1なら1 | 残す範囲を指定する |
| OR | どちらか1なら1 | 指定した範囲を1にする |
| XOR | 違えば1 | 指定した範囲を反転する、逆算する |
| NAND | ANDの反対 | AND結果を反転する |
XORは同じ値を2回使うと元に戻る
XORでは、同じ値を2回XORすると、元の値に戻ります。
A XOR B XOR B = A
1ビットで見ると、次のようになります。
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
同じビットをもう一度XORすると、
0で2回
→ 変化しない
1で2回
→ 反転して、もう一度反転
→ 元に戻る
となります。
この性質から、
A XOR B = C
なら、
A = B XOR C
B = A XOR C
と逆算できます。
マスク処理
16進数 0F は、2進数では次のようになります。
0F = 0000 1111
16進数では、1桁が4ビットに対応します。
0 = 0000
F = 1111
そのため、0F は「上位4ビットは0、下位4ビットは1」というビット列です。
同じ考え方で、FF は8ビットすべてが1です。
FF = 1111 1111
このテーマは、基本情報技術者試験の「基礎理論」や「情報に関する理論」と関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、ビット列と論理演算を使って、結果のビット列や不明な値を選ぶ問題が出題されます。
判断するときは、何をしたい操作なのかを先に見ます。
| 問題文の目的 | 使う演算 |
|---|---|
| 特定のビットだけ残したい | AND |
| 特定のビットを0にしたい | AND |
| 特定のビットを1にしたい | OR |
| 特定のビットを反転したい | XOR |
| XORの入力やかぎを逆算したい | XOR |
| ANDの結果を反転したい | NAND |
特定のビットを残す
元の値を 1101 0101 とします。
0F は 0000 1111 です。
ANDを取ると、次のようになります。
1101 0101
AND 0000 1111
= 0000 0101
下位4ビットの 0101 は、そのまま残っています。
全ビットを反転する
8ビットすべてを反転したい場合は、FF とXORを取ります。
FF = 1111 1111
元の値を 1010 1010 とすると、次のようになります。
1010 1010
XOR 1111 1111
= 0101 0101
XORで不明な値を逆算する
次の式を考えます。
入力 XOR かぎ = 出力
不明なのが「かぎ」なら、
かぎ = 入力 XOR 出力
です。
例として、
1100 XOR かぎ = 0010
なら、
かぎ
= 1100 XOR 0010
= 1110
となります。
複数のXORユニットを逆向きにたどる
XOR処理が直列につながっていても、出力側から順に逆算できます。
入力
↓ XOR かぎA
中間値1
↓ XOR かぎB
中間値2
↓ XOR かぎC
出力
最終出力と かぎC が分かれば、
中間値2 = 出力 XOR かぎC
です。
さらに、中間値1 が分かっていれば、
かぎB = 中間値1 XOR 中間値2
と求められます。
試験では、前から計算するだけでなく、出力から逆向きにたどることも意識します。
科目Bでどう使う?
科目Bでは、プログラムの条件判定やフラグ処理を読むときに、ビット演算の考え方が役立ちます。
例えば、あるビットだけを確認したい場合は、ANDを使います。
値 AND マスク
フラグを立てたいときはORを使います。
値 OR マスク
指定したビットを反転したいときはXORを使います。
値 XOR マスク
また、XORは簡単な暗号化と復号の考え方にも使われます。
平文 XOR かぎ = 暗号文
暗号文 XOR かぎ = 平文
同じかぎをもう一度XORすると元に戻るためです。
科目Bでは、次の対応を覚えておくと読みやすくなります。
取り出す・残す
→ AND
立てる・1にする
→ OR
反転する・元に戻す・逆算する
→ XOR
よくある誤解・混同
XORは同じなら1
誤りです。
XORは、2つのビットが異なるときに1になります。
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
XORの式は逆算できない
誤りです。
A XOR B = C
なら、
A = B XOR C
B = A XOR C
と求められます。
XORで不明な値を求めるときは、分かっている2つをXORする。
FFとORでも全ビットを反転できる
できません。
FF とORを取ると、結果はすべて1になります。
FF と OR
→ 全ビットを1にする
FF と XOR
→ 全ビットを反転する
0FとのANDは下位4ビットを消す
逆です。
0F = 0000 1111
なので、
上位4ビット
→ 0で消える
下位4ビット
→ 1で残る
となります。
XORを普通の足し算として考える
XORは数値の加算ではありません。
対応するビットを1桁ずつ比較し、異なるときに1を出します。
まとめ(試験直前用)
- ANDは、両方1のときだけ1になる
- ORは、どちらか1なら1になる
- XORは、2つのビットが異なるとき1になる
- NANDは、ANDの結果を反転する
- 特定のビットだけ残すときはANDを使う
- 特定のビットを1にするときはORを使う
- 特定のビットを反転するときはXORを使う
A XOR B = Cなら、不明な値は残りの2つのXORで求める- 同じ値を2回XORすると元に戻る
- 複数のXOR処理は、出力側から逆向きにたどれる
残すならAND、1にするならOR、反転・逆算ならXOR。