---
title: "NAND回路からXORを見抜く方法｜真理値表と等価回路の考え方【基本情報技術者試験】"
description: "NANDだけで構成された論理回路を、途中出力と真理値表から読み解き、XOR・OR・AND・NORとの違いを判断する方法を解説します。"
last_modified_at: "2026-08-02"
canonical_url: "https://stemtazoo.github.io/fe/nand-xor-circuit/"
section: "fe"
---

## まず結論

複数のNAND回路で構成された論理回路は、**途中の出力に名前を付け、入力 `00・01・10・11` を順番に入れて真理値表を作る**と確実に判定できます。

4個のNANDを組み合わせた代表的な回路は、XOR（排他的論理和）として動作します。

```text
AとBが同じ
→ 0

AとBが異なる
→ 1
```

XORの真理値表は次のとおりです。

| A | B | Y |
|---:|---:|---:|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |

覚える一文はこれです。

> **複雑な論理回路は、途中出力に名前を付けて真理値表で判定する。**

## 直感的な説明

XORは、2つのスイッチの状態が異なるときだけ点灯する回路です。

```text
A＝0、B＝0
→ 同じなので0

A＝0、B＝1
→ 異なるので1

A＝1、B＝0
→ 異なるので1

A＝1、B＝1
→ 同じなので0
```

英語では、次のように覚えられます。

> **Different is 1. Same is 0.**

論理回路が複雑に見えても、最終出力がこの真理値表と一致すればXORです。

## 定義・仕組み

### NANDとは

NANDは、ANDの出力を反転した論理回路です。

```text
NAND
=
A • B の否定
```

出力側に小さな丸が付いたAND記号がNANDです。

| A | B | A • B | NAND |
|---:|---:|---:|---:|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |

NANDは、両方が1のときだけ0になります。

### 回路記号の小さな丸

論理回路の記号に付く小さな丸は、否定を表します。

```text
AND ＋ 出力に丸
→ NAND

OR ＋ 出力に丸
→ NOR
```

丸を見落とすと、回路全体の出力を逆に判断してしまうため注意が必要です。

### NANDは万能ゲート

NANDだけを組み合わせて、NOT・AND・OR・XORなどを作ることができます。

このように、基本的な論理回路をすべて構成できる素子を万能ゲートといいます。

```text
NANDだけを組み合わせる
↓
NOTを作れる
ANDを作れる
ORを作れる
XORも作れる
```

### 4個のNANDでXORを作る

入力AとBから、最初のNAND出力を `P` とします。

```text
P = NOT(A • B)
```

次に、上側と下側のNAND出力をそれぞれ `Q`、`R` とします。

```text
Q = NOT(A • P)

R = NOT(B • P)
```

最後のNAND出力は、

```text
Y = NOT(Q • R)
```

です。

この回路へ4通りの入力を与えると、XORと同じ真理値表になります。

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

## 科目Aでどう出る？

科目Aでは、複数の論理素子を組み合わせた回路と、等価な基本回路を選ぶ問題として出題されます。

### 解く手順

次の順番で解くと安全です。

```text
1. 各素子の種類を確認する
2. 出力の丸を確認する
3. 途中出力にP、Q、Rなどの名前を付ける
4. 入力00、01、10、11を入れる
5. 最終出力の真理値表を作る
6. OR・AND・XOR・NORと比較する
```

### 途中出力を分ける

複雑な回路を一度に考えようとすると混乱しやすくなります。

```text
P = 最初のNAND出力
Q = 上側のNAND出力
R = 下側のNAND出力
Y = 最終出力
```

のように分けると、1段ずつ確認できます。

### 4通りの入力を試す

2入力の論理回路では、入力の組合せは4通りだけです。

```text
00
01
10
11
```

すべて試しても計算量は多くありません。

回路の形だけで推測するより、真理値表を作る方が確実です。

## 真理値表でXORを確認する

### A＝0、B＝0

```text
P = NAND(0, 0) = 1
Q = NAND(0, 1) = 1
R = NAND(0, 1) = 1
Y = NAND(1, 1) = 0
```

### A＝0、B＝1

```text
P = NAND(0, 1) = 1
Q = NAND(0, 1) = 1
R = NAND(1, 1) = 0
Y = NAND(1, 0) = 1
```

### A＝1、B＝0

```text
P = NAND(1, 0) = 1
Q = NAND(1, 1) = 0
R = NAND(0, 1) = 1
Y = NAND(0, 1) = 1
```

### A＝1、B＝1

```text
P = NAND(1, 1) = 0
Q = NAND(1, 0) = 1
R = NAND(1, 0) = 1
Y = NAND(1, 1) = 0
```

まとめると、次の結果になります。

| A | B | Y |
|---:|---:|---:|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |

これはXORの真理値表と一致します。

## OR・AND・XOR・NORの違い

4つの基本回路は、出力が1になる条件で切り分けます。

| 回路 | 1になる条件 |
|---|---|
| OR | 少なくとも一方が1 |
| AND | 両方とも1 |
| XOR | 2つの入力が異なる |
| NOR | 両方とも0 |

真理値表で見ると次のとおりです。

| A | B | OR | AND | XOR | NOR |
|---:|---:|---:|---:|---:|---:|
| 0 | 0 | 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 |

試験では、次の特徴を覚えておくと判断しやすくなります。

```text
00だけ0
→ OR

11だけ1
→ AND

01と10だけ1
→ XOR

00だけ1
→ NOR
```

## XORとORの違い

XORとORは、入力が `01` または `10` のときは同じ出力になります。

違いが出るのは `11` のときです。

```text
A＝1、B＝1

OR
→ 1

XOR
→ 0
```

XORの「排他的」は、両方同時を除外するという意味です。

```text
どちらか一方だけ1
→ XORは1

両方とも1
→ XORは0
```

## 論理式で確認する方法

XORは、次の論理式で表せます。

```text
Y = A • NOT(B) + NOT(A) • B
```

これは、

```text
Aが1でBが0
または
Aが0でBが1
```

という意味です。

つまり、入力が異なるときだけ1になります。

なお、このブログでは論理積を `•` で表します。

```text
A • B
→ AかつB

A + B
→ AまたはB
```

## どんな場面で使う？

### 半加算器

XORは、2進数の加算で使われます。

1ビット同士を加算するとき、

```text
和
→ XOR

桁上がり
→ AND
```

になります。

| A | B | 和 | 桁上がり |
|---:|---:|---:|---:|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |

### ビット反転

あるビットと `1` をXORすると、値が反転します。

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

一方、`0` とXORすると値は変わりません。

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

### 異なるかどうかの判定

2つのビットが異なるかを検出するときにも使えます。

```text
同じ
→ 0

異なる
→ 1
```

## よくある誤解・混同

### 最後の素子がNANDなので回路全体もNAND

誤りです。

複数のNANDを組み合わせることで、OR・AND・XORなど別の回路を作れます。

```text
使っている素子
≠
回路全体の機能
```

回路全体の機能は、最終出力の真理値表で判断します。

### 回路図の形だけで答える

複雑な組合せ回路は、見た目だけでは正確に判断しにくいです。

途中出力に名前を付け、1段ずつ計算します。

### 出力側の丸を見落とす

丸は否定を表します。

```text
AND
→ 両方1で1

NAND
→ 両方1で0
```

丸を見落とすと、出力がすべて逆になります。

### XORとORを混同する

`11` を入れて確認します。

```text
OR(1, 1) = 1

XOR(1, 1) = 0
```

### 論理式だけで一気に変形する

論理式の変形に慣れていない場合は、真理値表の方が安全です。

```text
論理式が複雑
→ 4通りを代入する

出力が分かった
→ 基本回路と比較する
```

## 科目Bでどう使う？

科目Bでは、論理演算を条件式やビット演算として読む力につながります。

Pythonでは、0と1を使ってXORを確認できます。

```python
inputs = [(0, 0), (0, 1), (1, 0), (1, 1)]

for a, b in inputs:
    y = a ^ b
    print(a, b, y)
```

出力は次のとおりです。

```text
0 0 0
0 1 1
1 0 1
1 1 0
```

NANDは、次のように表せます。

```python
def nand(a: int, b: int) -> int:
    return 1 - (a & b)
```

4個のNANDでXORを構成すると、次のようになります。

```python
def nand(a: int, b: int) -> int:
    return 1 - (a & b)


def xor_by_nand(a: int, b: int) -> int:
    p = nand(a, b)
    q = nand(a, p)
    r = nand(b, p)
    return nand(q, r)


for a, b in [(0, 0), (0, 1), (1, 0), (1, 1)]:
    print(a, b, xor_by_nand(a, b))
```

## まとめ（試験直前用）

- NANDはANDの出力を反転した回路
- 出力側の小さな丸は否定を表す
- NANDは万能ゲート
- 複雑な回路は途中出力に名前を付ける
- 2入力なら `00・01・10・11` の4通りを確認する
- 真理値表が一致すれば等価な回路と判断できる
- XORは入力が異なるときだけ1
- ORとXORは `11` の出力で区別する
- 4個のNANDでXORを構成できる
- XORは半加算器の和やビット比較に使われる

> **同じなら0、異なれば1。これがXORを見抜く基準。**
