最終更新日:2026年7月23日
fe fe-technology algorithm
まず結論
ビット演算は、ビット列を1桁ずつ見て、0と1を操作する計算です。
基本情報技術者試験では、AND、OR、XOR、NANDを次のように切り分けると分かりやすいです。
| 演算 | 試験での見方 |
|---|---|
| AND(論理積) | 特定のビットだけ残す |
| OR(論理和) | 特定のビットを1にする |
| XOR(排他的論理和) | 特定のビットを反転する |
| NAND(否定論理積) | ANDの結果を反転する |
特に、下位4ビットだけを残すなら、0F とのANDを使います。
0F = 0000 1111
また、8ビットすべてを反転するなら、全ビットが1の FF とXORを取ります。
FF = 1111 1111
直感的な説明
ANDは、ビット列にかぶせる 穴あきシート のようなものです。
例えば、8ビットのうち下位4ビットだけを見たいとします。
元のビット列:1010 0110
残したい範囲:____ 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 → 反転する
そのため、反転したい位置を 1 にしたマスクと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結果を反転する |
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 |
| ANDの結果を反転したい | NAND |
例えば、8ビットの下位4ビットを変化させたくない場合を考えます。
元のビット列を、ここでは 1101 0101 とします。
0F は 0000 1111 です。
ANDを取ると、次のようになります。
1101 0101
AND 0000 1111
= 0000 0101
下位4ビットの 0101 は、そのまま残っています。
一方で、OR、XOR、NANDでは、下位4ビットが変化する場合があります。
| 演算 | 結果 | 下位4ビット |
|---|---|---|
| AND | 0000 0101 |
元のまま |
| OR | 1101 1111 |
1になる |
| XOR | 1101 1010 |
反転する |
| NAND | 1111 1010 |
反転側になる |
したがって、下位4ビットをそのまま残すという目的なら、ANDが適切です。
全ビットを反転する
8ビットすべてを反転したい場合は、FF とXORを取ります。
FF = 1111 1111
元の値を 1010 1010 とすると、次のようになります。
1010 1010
XOR 1111 1111
= 0101 0101
各ビットについて、0 XOR 1 = 1、1 XOR 1 = 0 となるため、0と1がすべて入れ替わります。
8ビットすべてを反転
→ FF と XOR
16ビットすべてを反転
→ FFFF と XOR
ビット数に合わせて、全ビットが1になる値を使うのがポイントです。
科目Bでどう使う?
科目Bでは、プログラムの条件判定やフラグ処理を読むときに、ビット演算の考え方が役立ちます。
例えば、あるビットだけを確認したい場合は、ANDを使います。
値 AND マスク
マスクとは、確認したいビットを 1、無視したいビットを 0 にしたビット列です。
確認したいビット → 1
無視したいビット → 0
また、フラグを立てたいときはORを使います。
値 OR マスク
指定したビットを反転したいときはXORを使います。
値 XOR マスク
科目Bでは、コードを細かく暗記するよりも、次の対応を覚えておくと読みやすくなります。
取り出す・残す → AND
立てる・1にする → OR
反転する → XOR
よくある誤解・混同
ビット演算でよくある誤解は、AND、OR、XORをすべて「何かを比較する演算」として同じように見てしまうことです。
| 誤解 | 正しい理解 |
|---|---|
| ANDは両方の値を足す | ANDは両方1のときだけ1 |
| ORは常に元の値を残す | ORは1と演算したビットを1にする |
| XORは同じなら1 | XORは異なるときだけ1 |
| NANDはORと同じ | NANDはANDの結果を反転したもの |
0F は下位4ビットを消す |
0F とのANDは下位4ビットを残す |
FF とのORで全ビットを反転できる |
ORは全ビットを1にし、XORは全ビットを反転する |
特に、0F の意味をつかむことが大切です。
0F = 0000 1111
このビット列とANDを取ると、
上位4ビット → 0で消える
下位4ビット → 1で残る
になります。
FFとORでも全ビットを反転できる?
できません。
FF とORを取ると、元のビットが0でも1でも結果は1になります。
0 OR 1 = 1
1 OR 1 = 1
したがって、結果は常に 1111 1111 です。
一方、FF とXORを取ると、各ビットが反転します。
0 XOR 1 = 1
1 XOR 1 = 0
切り分けは次のとおりです。
FF と OR
→ 全ビットを1にする
FF と XOR
→ 全ビットを反転する
試験では、次のように切り分けると迷いにくいです。
残したい → 1 と AND
消したい → 0 と AND
1にしたい → 1 と OR
反転したい → 1 と XOR
まとめ(試験直前用)
- ANDは、両方1のときだけ1になる
- ORは、どちらか1なら1になる
- XORは、2つのビットが異なるとき1になる
- NANDは、ANDの結果を反転する
- 特定のビットだけ残すときはANDを使う
0F = 0000 1111なので、0FとのANDは下位4ビットを残す- 8ビットすべてを反転するときは、
FFとXORを取る FFとのORは全ビットを1にし、FFとのXORは全ビットを反転する- 「残す・1にする・反転する」で選択肢を切る