
NANDゲートから全加算器を作る|Pythonで論理回路を組み立てる
2026-09-04 ・ 実践
CPUの中では、トランジスタが作る論理ゲートが計算をしています。驚くのは、たった1種類の「NANDゲート」だけで、あらゆる論理回路——最終的には足し算まで——が作れること。この記事ではPythonでNANDから出発し、全加算器までボトムアップで組み立てます。半導体が「計算する」しくみが、手を動かすと腹落ちします。
NANDは万能
NAND(Not AND)は「両方1のときだけ0、それ以外は1」を返すゲートです。これ1種類あれば、NOTもANDもORも作れる——この性質を機能的完全性と呼びます。
なぜNANDが主役なのか
CMOS(トランジスタの基礎参照)ではNANDが少ないトランジスタで効率よく作れます。だから実際のチップでもNANDは基本部品。1種類で全部作れるなら製造も検証も楽、という実利があります。
準備
Pythonだけ。ライブラリは不要です。
① NANDから基本ゲートを作る
NANDを出発点に、NOT・AND・OR・XORを組み上げます。
def NAND(a, b):
return 0 if (a and b) else 1
def NOT(a):
return NAND(a, a)
def AND(a, b):
return NOT(NAND(a, b))
def OR(a, b):
return NAND(NOT(a), NOT(b)) # ド・モルガンの法則
def XOR(a, b):
c = NAND(a, b)
return NAND(NAND(a, c), NAND(b, c))
真理値表で確かめます。
for a in (0, 1):
for b in (0, 1):
print(a, b, "| AND", AND(a, b), " OR", OR(a, b), " XOR", XOR(a, b))
XORは「入力が違うとき1」。これが足し算の"繰り上がりのない桁"に効いてきます。
🔌 論理ゲートビルダー
入力を切り替えて、ゲートが0と1をどう計算するか見てみましょう
両方が1のとき1
入力A
入力B
出力
A・Bのマスを押すと0↔1が切り替わります
真理値表(いまの入力の行が光ります)
| A | B | 出力 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
この小さな判断(ゲート)を何十億個も集めたものがCPUやGPUです。NANDだけですべての回路が作れます
② 半加算器: 1ビットの足し算
1ビット同士の足し算は、答え(sum)と繰り上がり(carry)に分かれます。1+1=10 なので sum=0, carry=1。これはXORとANDそのものです。
def half_adder(a, b):
s = XOR(a, b) # 和(繰り上がりを除いた桁)
c = AND(a, b) # 繰り上がり
return s, c
print(half_adder(1, 1)) # (0, 1) = 「0、繰り上がり1」
③ 全加算器: 下の桁からの繰り上がりも足す
複数桁を足すには、下の桁からの繰り上がり(cin)も受け取る必要があります。半加算器を2つ繋げます。
def full_adder(a, b, cin):
s1, c1 = half_adder(a, b)
s2, c2 = half_adder(s1, cin)
return s2, OR(c1, c2) # 和, 繰り上がり
# 全パターンを検証
for a in (0, 1):
for b in (0, 1):
for cin in (0, 1):
s, cout = full_adder(a, b, cin)
assert (cout * 2 + s) == (a + b + cin) # 2進の足し算と一致
print("全加算器: 全8パターンOK ✅")
assert が通れば、NANDだけで作った回路が正しく足し算している証明です。あとはこの全加算器を桁数ぶん繋げれば、4ビット・8ビット……の加算器になり、CPUの演算器(ALU)の心臓部になります。
NANDから足し算まで
NAND
唯一の部品
基本ゲート
NOT/AND/OR/XOR
全加算器
1桁の足し算
ALU
桁を並べて演算
4ビット加算器に挑戦
full_adder を4回繋ぎ、下の桁のcoutを上の桁のcinへ渡すと4ビット加算器(リップルキャリー加算器)になります。3 + 5 = 8 を2進で計算できるか試してみてください。実際のチップ設計もこの積み上げの延長です。
まとめ
- NAND1種類であらゆる論理回路が作れる(機能的完全性)
- NANDからNOT・AND・OR・XORをボトムアップで構築できる
- 半加算器=XOR(和)+AND(繰り上がり)、全加算器はそれを2つ連結
- 全加算器を並べればCPUの演算器(ALU)になる
もう少し詳しく(背景と理論)
NAND ゲートは機能的完全(functionally complete)な素子です——NAND だけを組み合わせれば、NOT・AND・OR、ひいては加算器やあらゆる論理回路を構成できます1。これはド・モルガンの法則から導かれる性質で、NOR も同じく単体で完全です。半導体製造でこれが実務上重要なのは、CMOS では NAND/NOR が AND/OR より少ないトランジスタで作れ、しかも反転論理が自然だからです2。だから実際のチップは「まず NAND/NOR ありき」で設計され、標準セルライブラリの中核を成します。基本ゲート1種類から全計算が生まれるという事実は、コンピュータが「単純な部品の膨大な組み合わせ」であることの原点を示しています3。
次の一歩 🌸
物理的な素子の話はトランジスタの基礎、回路の全体像は論理回路のしくみ、設計の流れはチップ設計の流れへどうぞ。