---
title: "ビット演算のAND・OR・XORとは？マスク処理で選択肢を切る【基本情報技術者試験】"
description: "ビット演算のAND、OR、XOR、NANDを「残す・1にする・反転する・ANDを反転する」で整理し、0Fによるマスク処理とFFとのXORによる全ビット反転をFE試験向けに解説します。"
last_modified_at: "2026-07-23"
canonical_url: "https://stemtazoo.github.io/fe/bitwise-operations-mask/"
section: "fe"
---

## まず結論

ビット演算は、**ビット列を1桁ずつ見て、0と1を操作する計算**です。

基本情報技術者試験では、AND、OR、XOR、NANDを次のように切り分けると分かりやすいです。

| 演算 | 試験での見方 |
|---|---|
| AND（論理積） | 特定のビットだけ残す |
| OR（論理和） | 特定のビットを1にする |
| XOR（排他的論理和） | 特定のビットを反転する |
| NAND（否定論理積） | ANDの結果を反転する |

特に、**下位4ビットだけを残す**なら、`0F` とのANDを使います。

```text
0F = 0000 1111
```

また、**8ビットすべてを反転する**なら、全ビットが1の `FF` とXORを取ります。

```text
FF = 1111 1111
```

## 直感的な説明

ANDは、ビット列にかぶせる **穴あきシート** のようなものです。

例えば、8ビットのうち下位4ビットだけを見たいとします。

```text
元のビット列：1010 0110
残したい範囲：____ 1111
```

ここで、`0000 1111` とANDを取ります。

```text
  1010 0110
AND 0000 1111
=   0000 0110
```

上位4ビットは `0` とANDするので消えます。

下位4ビットは `1` とANDするので元のまま残ります。

```text
0 AND 何か = 0
1 AND 何か = 何かが残る
```

このように、特定のビットだけを取り出す処理を **マスク処理** と呼ぶことがあります。

一方、XORは「反転スイッチ」のように考えられます。

```text
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進数では次のようになります。

```text
0F = 0000 1111
```

16進数では、1桁が4ビットに対応します。

```text
0 = 0000
F = 1111
```

そのため、`0F` は「上位4ビットは0、下位4ビットは1」というビット列です。

同じ考え方で、`FF` は8ビットすべてが1です。

```text
FF = 1111 1111
```

このテーマは、基本情報技術者試験の「基礎理論」や「情報に関する理論」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、ビット列と論理演算を使って、結果のビット列を選ぶ問題が出題されやすいです。

判断するときは、何をしたい操作なのかを先に見ます。

| 問題文の目的 | 使う演算 |
|---|---|
| 特定のビットだけ残したい | AND |
| 特定のビットを0にしたい | AND |
| 特定のビットを1にしたい | OR |
| 特定のビットを反転したい | XOR |
| ANDの結果を反転したい | NAND |

例えば、8ビットの下位4ビットを変化させたくない場合を考えます。

元のビット列を、ここでは `1101 0101` とします。

`0F` は `0000 1111` です。

ANDを取ると、次のようになります。

```text
  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を取ります。

```text
FF = 1111 1111
```

元の値を `1010 1010` とすると、次のようになります。

```text
  1010 1010
XOR 1111 1111
=   0101 0101
```

各ビットについて、`0 XOR 1 = 1`、`1 XOR 1 = 0` となるため、0と1がすべて入れ替わります。

```text
8ビットすべてを反転
→ FF と XOR

16ビットすべてを反転
→ FFFF と XOR
```

ビット数に合わせて、全ビットが1になる値を使うのがポイントです。

## 科目Bでどう使う？

科目Bでは、プログラムの条件判定やフラグ処理を読むときに、ビット演算の考え方が役立ちます。

例えば、あるビットだけを確認したい場合は、ANDを使います。

```text
値 AND マスク
```

マスクとは、確認したいビットを `1`、無視したいビットを `0` にしたビット列です。

```text
確認したいビット → 1
無視したいビット → 0
```

また、フラグを立てたいときはORを使います。

```text
値 OR マスク
```

指定したビットを反転したいときはXORを使います。

```text
値 XOR マスク
```

科目Bでは、コードを細かく暗記するよりも、次の対応を覚えておくと読みやすくなります。

```text
取り出す・残す → 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` の意味をつかむことが大切です。

```text
0F = 0000 1111
```

このビット列とANDを取ると、

```text
上位4ビット → 0で消える
下位4ビット → 1で残る
```

になります。

### FFとORでも全ビットを反転できる？

できません。

`FF` とORを取ると、元のビットが0でも1でも結果は1になります。

```text
0 OR 1 = 1
1 OR 1 = 1
```

したがって、結果は常に `1111 1111` です。

一方、`FF` とXORを取ると、各ビットが反転します。

```text
0 XOR 1 = 1
1 XOR 1 = 0
```

切り分けは次のとおりです。

```text
FF と OR
→ 全ビットを1にする

FF と XOR
→ 全ビットを反転する
```

試験では、次のように切り分けると迷いにくいです。

```text
残したい → 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にする・反転する」で選択肢を切る
