最終更新日:2026年8月2日
fe fe-technology logic-circuit digital-circuit
まず結論
複数のNAND回路で構成された論理回路は、途中の出力に名前を付け、入力 00・01・10・11 を順番に入れて真理値表を作ると確実に判定できます。
4個のNANDを組み合わせた代表的な回路は、XOR(排他的論理和)として動作します。
AとBが同じ
→ 0
AとBが異なる
→ 1
XORの真理値表は次のとおりです。
| A | B | Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
覚える一文はこれです。
複雑な論理回路は、途中出力に名前を付けて真理値表で判定する。
直感的な説明
XORは、2つのスイッチの状態が異なるときだけ点灯する回路です。
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の出力を反転した論理回路です。
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になります。
回路記号の小さな丸
論理回路の記号に付く小さな丸は、否定を表します。
AND + 出力に丸
→ NAND
OR + 出力に丸
→ NOR
丸を見落とすと、回路全体の出力を逆に判断してしまうため注意が必要です。
NANDは万能ゲート
NANDだけを組み合わせて、NOT・AND・OR・XORなどを作ることができます。
このように、基本的な論理回路をすべて構成できる素子を万能ゲートといいます。
NANDだけを組み合わせる
↓
NOTを作れる
ANDを作れる
ORを作れる
XORも作れる
4個のNANDでXORを作る
入力AとBから、最初のNAND出力を P とします。
P = NOT(A • B)
次に、上側と下側のNAND出力をそれぞれ Q、R とします。
Q = NOT(A • P)
R = NOT(B • P)
最後のNAND出力は、
Y = NOT(Q • R)
です。
この回路へ4通りの入力を与えると、XORと同じ真理値表になります。
このテーマは、基本情報技術者試験の論理回路やコンピュータ構成要素に関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、複数の論理素子を組み合わせた回路と、等価な基本回路を選ぶ問題として出題されます。
解く手順
次の順番で解くと安全です。
1. 各素子の種類を確認する
2. 出力の丸を確認する
3. 途中出力にP、Q、Rなどの名前を付ける
4. 入力00、01、10、11を入れる
5. 最終出力の真理値表を作る
6. OR・AND・XOR・NORと比較する
途中出力を分ける
複雑な回路を一度に考えようとすると混乱しやすくなります。
P = 最初のNAND出力
Q = 上側のNAND出力
R = 下側のNAND出力
Y = 最終出力
のように分けると、1段ずつ確認できます。
4通りの入力を試す
2入力の論理回路では、入力の組合せは4通りだけです。
00
01
10
11
すべて試しても計算量は多くありません。
回路の形だけで推測するより、真理値表を作る方が確実です。
真理値表でXORを確認する
A=0、B=0
P = NAND(0, 0) = 1
Q = NAND(0, 1) = 1
R = NAND(0, 1) = 1
Y = NAND(1, 1) = 0
A=0、B=1
P = NAND(0, 1) = 1
Q = NAND(0, 1) = 1
R = NAND(1, 1) = 0
Y = NAND(1, 0) = 1
A=1、B=0
P = NAND(1, 0) = 1
Q = NAND(1, 1) = 0
R = NAND(0, 1) = 1
Y = NAND(0, 1) = 1
A=1、B=1
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 |
試験では、次の特徴を覚えておくと判断しやすくなります。
00だけ0
→ OR
11だけ1
→ AND
01と10だけ1
→ XOR
00だけ1
→ NOR
XORとORの違い
XORとORは、入力が 01 または 10 のときは同じ出力になります。
違いが出るのは 11 のときです。
A=1、B=1
OR
→ 1
XOR
→ 0
XORの「排他的」は、両方同時を除外するという意味です。
どちらか一方だけ1
→ XORは1
両方とも1
→ XORは0
論理式で確認する方法
XORは、次の論理式で表せます。
Y = A • NOT(B) + NOT(A) • B
これは、
Aが1でBが0
または
Aが0でBが1
という意味です。
つまり、入力が異なるときだけ1になります。
なお、このブログでは論理積を • で表します。
A • B
→ AかつB
A + B
→ AまたはB
どんな場面で使う?
半加算器
XORは、2進数の加算で使われます。
1ビット同士を加算するとき、
和
→ XOR
桁上がり
→ AND
になります。
| A | B | 和 | 桁上がり |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
ビット反転
あるビットと 1 をXORすると、値が反転します。
0 XOR 1 = 1
1 XOR 1 = 0
一方、0 とXORすると値は変わりません。
0 XOR 0 = 0
1 XOR 0 = 1
異なるかどうかの判定
2つのビットが異なるかを検出するときにも使えます。
同じ
→ 0
異なる
→ 1
よくある誤解・混同
最後の素子がNANDなので回路全体もNAND
誤りです。
複数のNANDを組み合わせることで、OR・AND・XORなど別の回路を作れます。
使っている素子
≠
回路全体の機能
回路全体の機能は、最終出力の真理値表で判断します。
回路図の形だけで答える
複雑な組合せ回路は、見た目だけでは正確に判断しにくいです。
途中出力に名前を付け、1段ずつ計算します。
出力側の丸を見落とす
丸は否定を表します。
AND
→ 両方1で1
NAND
→ 両方1で0
丸を見落とすと、出力がすべて逆になります。
XORとORを混同する
11 を入れて確認します。
OR(1, 1) = 1
XOR(1, 1) = 0
論理式だけで一気に変形する
論理式の変形に慣れていない場合は、真理値表の方が安全です。
論理式が複雑
→ 4通りを代入する
出力が分かった
→ 基本回路と比較する
科目Bでどう使う?
科目Bでは、論理演算を条件式やビット演算として読む力につながります。
Pythonでは、0と1を使ってXORを確認できます。
inputs = [(0, 0), (0, 1), (1, 0), (1, 1)]
for a, b in inputs:
y = a ^ b
print(a, b, y)
出力は次のとおりです。
0 0 0
0 1 1
1 0 1
1 1 0
NANDは、次のように表せます。
def nand(a: int, b: int) -> int:
return 1 - (a & b)
4個のNANDでXORを構成すると、次のようになります。
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を見抜く基準。