※小説ではない※専門書 要約資料集 為替(換算)3.9万円でもらう 紐解集生成 専門 初入門 資料 作:{作者名}
> 学問の宇宙・数学派生分野との接続領域(論理回路・デジタル回路工学)。ガイド役: Fable 5 監修 / Sonnet 5 執筆(原画班・回路隊)
> トーン規約: GAKUMON_UNIVERSE.md準拠。専門用語は初出で必ず説明する。水準五〜六中心。
> 本書は「関数における構造のパターン数百種類、数列、その組み合わせで実際に電卓が組み立て上げられる」という構想を、論理回路(ろんりかいろ)という具体的な題材に翻訳したものである。0と1だけの世界から、足し算のできる電卓が紙の上に組み上がっていく過程を、一本道でたどっていく。
# BOOK-0185 電卓を組み立てる — 論理回路の実験室
> 学問の宇宙・数学派生分野との接続領域(論理回路・デジタル回路工学)。ガイド役: Fable 5 監修 / Sonnet 5 執筆(原画班・回路隊)
> トーン規約: GAKUMON_UNIVERSE.md準拠。専門用語は初出で必ず説明する。水準五〜六中心。
> 本書は「関数における構造のパターン数百種類、数列、その組み合わせで実際に電卓が組み立て上げられる」という構想を、論理回路(ろんりかいろ)という具体的な題材に翻訳したものである。0と1だけの世界から、足し算のできる電卓が紙の上に組み上がっていく過程を、一本道でたどっていく。
---
## 序章 — 0と1だけで、なぜ計算ができるのか
電卓やコンピュータの内部では、あらゆる計算が最終的には「電圧が高いか低いか」という、たった2種類の状態の組み合わせに還元される。この2状態を数字の**1**と**0**で表したものが、いわゆる**2進数(にしんすう)**である。
本書はこの2進数の世界を出発点に、次の一本道で進む。
1. まず、0と1を扱う最も基本的な部品である**論理ゲート**(NOT・AND・OR・XORの4種)を確認する。
2. 次に、論理ゲートを組み合わせて「1ビット同士を足す回路」である**半加算器**を作る。
3. 半加算器を発展させ、「繰り上がりも受け取れる回路」である**全加算器**を作る。
4. 全加算器を4つ並べて、**4ビット同士の足し算ができる回路**(リップルキャリー加算器)を組み上げる。
5. **2の補数(にのほすう)**という技法を使い、引き算専用の回路を新たに作らずに、足し算の回路だけで引き算を実現する方法を学ぶ。
6. 掛け算が「足し算の繰り返し」で実現できることを概説する。
7. 最後に、計算結果を表示する**7セグメントディスプレイ**の考え方に触れる。
これらをすべて紙と鉛筆だけでたどることで、電卓の心臓部にあたる**加算回路一式**を、実際に自分の手で組み上げたのと同じ理解に到達することが本書の目標である。
なお、本書はあくまで**紙の上での思考実験**として電卓を組み立てる内容であり、実際の電子部品を使った配線作業を推奨するものではない。もし将来、実物の電子部品(ICチップやブレッドボードなど)を使った回路の組み立てに挑戦したくなった場合は、必ず専門書と保護者や指導者の指導のもとで行い、**ショート(短絡。回路の意図しない場所同士がつながってしまい、大きな電流が流れてしまう事故)には十分注意する**必要がある。本書はその手前にある、紙の上の設計図づくりに専念する。
---
## 休憩所ゼロ: まとめ箱 — 序章のポイント
```
出発点: 0と1の2状態だけで計算をする世界(2進数)
道のり: 論理ゲート(4種) → 半加算器 → 全加算器 → 4bit加算器 → 2の補数減算 → 乗算概説 → 表示
到達点: 紙の上で「足し算のできる電卓」の回路一式を組み上げる
安全: 実配線は専門書+保護者指導のもとで。本書は紙上の思考実験に専念
```
---
## 第一章: 4つの基本論理ゲート — NOT・AND・OR・XOR
論理回路の世界では、0と1の入力を受け取り、決まった規則で0か1を出力する部品を**論理ゲート(ろんりゲート)**と呼ぶ。ここでは電卓を組み立てる上で土台となる4種類のゲートを確認する。それぞれのゲートの動作は**真理値表(しんりちひょう、水準三: 入力のすべての組み合わせに対して、出力がどうなるかを一覧にした表)**で完全に定義できる。
### 1-1. NOTゲート(否定)
NOTゲートは入力が1つだけの、最も単純なゲートである。入力を**反転**させる、すなわち0を1に、1を0にして出力する。
**真理値表(NOT):**
| 入力A | 出力 |
|---|---|
| 0 | 1 |
| 1 | 0 |
回路図の記号としては、三角形に小さな丸(バブルと呼ばれる)を付けた記号で描かれることが多い。本書ではASCII(アスキー、文字だけで図を表す方式)で以下のように表す。
```
A ──▷o── 出力
NOT
```
### 1-2. ANDゲート(論理積)
ANDゲートは入力が2つあり、**両方とも1のときだけ**出力が1になる。「かつ」を意味する。
**真理値表(AND):**
| 入力A | 入力B | 出力 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
```
A ──┐
├─[AND]── 出力
B ──┘
```
### 1-3. ORゲート(論理和)
ORゲートも入力は2つで、**どちらか一方でも1なら**出力が1になる。「または」を意味する。
**真理値表(OR):**
| 入力A | 入力B | 出力 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
```
A ──┐
├─[OR ]── 出力
B ──┘
```
### 1-4. XORゲート(排他的論理和)
XOR(エックスオア、排他的論理和)は本書の主役となる特別なゲートである。ORとよく似ているが、**入力が異なるときだけ**出力が1になり、**両方とも1のときは0に戻る**という点が違う。「どちらか一方だけ」を意味すると考えるとよい。
**真理値表(XOR):**
| 入力A | 入力B | 出力 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
```
A ──┐
├─[XOR]── 出力
B ──┘
```
XORとORの違いはただ一行、A=1・B=1の行だけである。ORはこの行で1を返すが、XORは0を返す。この「両方1のときだけ結果が変わる」という性質が、次章で見る「足し算の繰り上がり」の表現に直結していく。
**検算(自己検算・実際に手を動かして確認):** 4つの真理値表はいずれも入力の全パターン(NOTは2通り、AND/OR/XORはそれぞれ4通り)を尽くしており、実際に0と1を当てはめて一行ずつ計算し、上表の値と一致することを確認済みである(NOT: 1-0=1件、0-1=1件の計2件/AND・OR・XOR: 各4件、合計12件をすべて手計算で照合)。
---
## 休憩所①: まとめ箱 — 第一章のポイント
```
NOT: 入力を反転する(1つの入力)
AND: 両方1のときだけ1(かつ)
OR : どちらか1つでも1なら1(または)
XOR: 入力が異なるときだけ1、両方1だと0に戻る(排他的論理和)
XORとORの差は「両方1」の行だけ。この差が次章の繰り上がり表現の鍵になる。
```
---
## 第二章: 半加算器(Half Adder) — 1ビット同士を足す最初の回路
いよいよ論理ゲートを組み合わせて、実際に「足し算」をする回路を作る。まず考えるのは、1ビット(0か1)同士の足し算である。
1ビット同士の足し算には、次の4パターンしかない。
```
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 (2進数の「10」は10進数の2にあたる。1桁では収まらず繰り上がりが発生する)
```
最後の「1+1」だけ、答えが2桁になっている点に注目してほしい。1桁の出力(**和、英語でSum=S**)だけでは表現しきれず、上の桁への**繰り上がり(桁上げ、英語でCarry=C)**という、もう1つの出力が必要になる。
この「2つの1ビット入力(A・B)から、和Sと繰り上がりCの2つの出力を作る回路」を**半加算器(はんかさんき、Half Adder)**と呼ぶ。「半」と付くのは、次章で見るとおり、下位の桁からの繰り上がり入力(Cin)をまだ受け取れない、簡易版の加算器だからである。
### 2-1. 半加算器の真理値表
A、Bの全4パターンに対し、S(和)とC(繰り上がり)がどうなるかを整理する。
| 入力A | 入力B | 出力S(和) | 出力C(繰り上がり) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
ここで**S列とXORゲートの真理値表を見比べてほしい**。0,1,1,0という並びがまったく同じである。同様に**C列とANDゲートの真理値表**も、0,0,0,1という並びで一致している。
つまり、
```
S(和) = A XOR B
C(繰り上がり) = A AND B
```
という、たった2つのゲートの組み合わせだけで、半加算器が実現できることになる。
### 2-2. なぜXORとANDの組合せで実現できるのか
これは偶然の一致ではない。1+1=10という2進数の足し算を1桁ごとに見ると、「今の桁に残る数(和)」と「上の桁に押し出す数(繰り上がり)」に分解できる。
- **和(S)は「AとBのうち奇数個が1のとき1になる」量である。** 1ビット同士なら「ちょうど片方だけが1のとき」に等しく、これはXORの定義そのものである。
- **繰り上がり(C)は「AとBが両方とも1で、初めて2桁目に繰り上がる」量である。** これは「AとBが両方とも1のときだけ1」というANDの定義そのものである。
XORが「和」を、ANDが「繰り上がり」を、それぞれ過不足なく表現できるからこそ、半加算器はこの2ゲートだけで完成する。
### 2-3. 半加算器のASCII回路図
AとBの2つの入力が、それぞれXORゲートとANDゲートの**両方に枝分かれ**して配線される様子を図示する。
```
┌─────────────┐
A ───┼──────┬──────┼─── XORゲートへ
│ │ │
│ │ │
B ───┼──────┼──┬───┼─── XORゲートとANDゲートへ
│ │ │ │
│ ▼ ▼ │
│ ┌────────┐│
└──▶│ XOR │┼───────────▶ S (和)
└────────┘│
┌─────────────┘
│
A ───┼──────┐
│ │
B ───┼──┐ │
│ │ │
│ ▼ ▼
│┌────────┐
└│ AND │───────────────▶ C (繰り上がり)
└────────┘
```
文章で整理すると、「A、Bという同じ2本の配線が、XORゲートとANDゲートの両方に分岐して同時に流れ込む」という構造である。1組の入力から2種類の計算(XORとAND)を並行して行い、それぞれの計算結果がSとCという別々の出力線になる、という点が半加算器の設計の要点である。
---
## 休憩所②: まとめ箱 — 第二章のポイント
```
半加算器 = 1ビット同士(A,B)を足し、和(S)と繰り上がり(C)を出す回路
S(和) = A XOR B ← 「片方だけ1」を表すXORの性質と一致
C(繰り上がり) = A AND B ← 「両方1」を表すANDの性質と一致
回路構造: A,Bを分岐させ、XORゲートとANDゲートの両方へ同時に配線する
弱点: 下位桁からの繰り上がり入力(Cin)を受け取れない → 次章の全加算器で解決
```
---
## 第三章: 全加算器(Full Adder) — 繰り上がりを受け取れる本物の加算回路
半加算器には大きな弱点がある。実際の多桁の足し算では、1の位だけでなく2の位、4の位……と、**下の桁からの繰り上がりを受け取りながら**計算しなければならない。しかし半加算器の入力はAとBの2つだけで、繰り上がりの入力を受け取る場所がない。
そこで登場するのが**全加算器(ぜんかさんき、Full Adder)**である。全加算器は入力を3つに増やす。
- A: 1ビット目の入力
- B: 2ビット目の入力
- **Cin(シーイン、Carry-in): 下位の桁からの繰り上がり入力**
出力は半加算器と同様に2つ。
- S: 和
- **Cout(シーアウト、Carry-out): 上位の桁への繰り上がり出力**
### 3-1. 全加算器の真理値表
A、B、Cinの3入力は2×2×2=8通りの組み合わせがある。すべて書き出す。
| 入力A | 入力B | 入力Cin | 出力S(和) | 出力Cout(繰り上がり) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
この表の読み方を確認しよう。たとえばA=1,B=1,Cin=1の行(合計=1+1+1=3=2進数で「11」)では、S=1・Cout=1となっている。これは「3」を2進数で表すと「11」(1の位が1、2の位が1)になることに対応している。
### 3-2. 全加算器 = 半加算器2つ + ORゲート
全加算器は、ゼロから新しく設計する必要はない。**半加算器を2つ連結し、最後にORゲートを1つ足すだけ**で組み立てることができる。
手順は次のとおりである。
1. **1つ目の半加算器**にA、Bを入力する。ここから仮の和(S1)と仮の繰り上がり(C1)が出る。
2. **2つ目の半加算器**に、1つ目の仮の和(S1)と、下位からの繰り上がり入力Cinを入力する。ここから最終的な和(S)と、2つ目の繰り上がり(C2)が出る。
3. **C1とC2をORゲートに入力する**。ORの出力が最終的なCoutになる。
なぜ2つの繰り上がり(C1とC2)をORでまとめてよいのかというと、A+B+Cinの合計が3(2進数で11)になる組み合わせは表の最後の1行(A=1,B=1,Cin=1)しかなく、それ以外でCoutが1になるケースでは、C1とC2のどちらか一方だけが1になる(両方同時に1になることはない)ためである。「どちらか一方でも繰り上がりが発生すれば、上の桁に繰り上げる」という考え方は、まさにORの「どちらか一方でも1なら1」という定義と一致する。
### 3-3. 全加算器のASCII回路図
半加算器2つ(HA1・HA2)とORゲート1つの連結を図示する。
```
┌───────────┐
A ─────────▶│ │
│ HA1 │── S1 ──┐
B ─────────▶│(半加算器1) │ │ ┌───────────┐
│ │── C1 ─┼─────▶│ │
└───────────┘ │ │ HA2 │── S (最終的な和)
│ │(半加算器2) │─────────────▶
Cin ─────────────────────────────┴─────▶│ │
└───────────┘
│
C2
│
C1 ──────────────┐ │
▼ ▼
┌────────────┐
│ OR │──────────▶ Cout
└────────────┘
```
図の要点を文章でも整理する。「A,BをHA1(1つ目の半加算器)に入れてS1・C1を得る」→「S1とCinをHA2(2つ目の半加算器)に入れて最終的なSとC2を得る」→「C1とC2をORゲートにまとめてCoutにする」という、3段階の直列構造である。
**検算(自己検算):** 上記の「半加算器2つ+OR」構成が、8行の真理値表とすべて一致するかを実際にA,B,Cinの8通り全てで手計算し確認済みである(例: A=1,B=1,Cin=1のとき、HA1はA=1,B=1を受けてS1=0,C1=1。HA2はS1=0,Cinを受けてS=0 XOR 1=1,C2=0 AND 1=0。C1=1とC2=0をORするとCout=1。よってS=1,Cout=1となり、表の最終行と一致)。
---
## 休憩所③: まとめ箱 — 第三章のポイント
```
全加算器 = A,B,Cin(下位からの繰り上がり)の3入力を受け取り、S(和)とCout(上位への繰り上がり)を出す
構造 = 半加算器(HA1)でA,Bを処理 → 半加算器(HA2)でS1,Cinを処理 → 2つの繰り上がり(C1,C2)をORでまとめてCout
真理値表は8行(2×2×2通り)。全加算器は加算回路の「基本単位(1桁分)」になる
```
---
## 第四章: リップルキャリー4bit加算器 — 電卓の心臓部
全加算器(1桁分の計算装置)が手に入ったので、これを複数並べれば多桁の足し算ができる。本章では4ビット(4桁の2進数)同士の足し算ができる回路を組み上げる。
考え方はシンプルである。全加算器を4つ用意し、**1つ目の全加算器のCout(繰り上がり出力)を、2つ目の全加算器のCin(繰り上がり入力)につなぐ**。これを4段繰り返す。繰り上がり(キャリー)が下の桁から上の桁へ、水が低いところから高いところへ流れる(リップル=さざ波)ように伝わっていくことから、この方式は**リップルキャリー加算器**と呼ばれる。
### 4-1. リップルキャリー4bit加算器のASCII回路図
4bitの数をA₃A₂A₁A₀(A₀が1の位、A₃が8の位)、B₃B₂B₁B₀とし、4つの全加算器(FA0〜FA3)を数珠つなぎにする。
```
Cout Cout Cout Cout
▲ ▲ ▲ ▲
│ │ │ │
┌─────────┐ │ ┌─────────┐ │ ┌─────────┐ │ ┌─────────┐
│ FA3 │───┘ │ FA2 │───┘ │ FA1 │───┘ │ FA0 │
A₃─│(全加算器)│ │(全加算器)│ │(全加算器)│ │(全加算器)│─A₀
B₃─│ 段3 │◀─Cin │ 段2 │◀─Cin │ 段1 │◀─Cin │ 段0 │─B₀
└─────────┘ C3 └─────────┘ C2 └─────────┘ C1 └─────────┘ Cin=0
│ │ │ │ (最下位は
▼ ▼ ▼ ▼ 繰り上がり入力なし)
S₃ S₂ S₁ S₀
最終結果(5bit): [FA3のCout] S₃ S₂ S₁ S₀
```
図の要点は「各段(FA0〜FA3)のCout(繰り上がり出力)が、そのまま隣の段(1つ上の桁)のCinに直結している」という点である。最下位のFA0だけは下の桁が存在しないため、Cin=0を固定で入力する。最上位のFA3のCoutは、4bitでは収まりきらない5bit目の答えとして、そのまま最終結果の一部になる。
### 4-2. 検算行: 1011(11) + 0110(6) = 10001(17)
実際に4bit同士の足し算を、2進数の筆算として検算する。10進数で表すと11+6=17であり、この17という答えが2進数の筆算でも正しく出ることを、キャリー(繰り上がり)の列も含めて確認する。
まず各桁をFA0(最下位・1の位)からFA3(最上位・8の位)に対応づける。A=1011を1の位から順に読むとA₀=1,A₁=1,A₂=0,A₃=1。B=0110はB₀=0,B₁=1,B₂=1,B₃=0である。
**筆算(キャリー列付き):**
```
繰り上がり: 1 1 0 0 (← 上段。各桁の計算で次の桁へ送られたキャリー)
A₃ A₂ A₁ A₀
1 0 1 1 = 1011 (11)
+ 0 1 1 0 = 0110 (6)
-----------------
1 0 0 0 1 = 10001 (17)
(5bit目)S₃ S₂ S₁ S₀
```
各桁をFAに対応させながら、実際に1桁ずつ計算した結果は次のとおりである(すべて実測・検算済み)。
| 段(FA) | A | B | Cin(下からの繰り上がり) | S(和) | Cout(上への繰り上がり) |
|---|---|---|---|---|---|
| FA0(1の位) | 1 | 0 | 0 | 1 | 0 |
| FA1(2の位) | 1 | 1 | 0 | 0 | 1 |
| FA2(4の位) | 0 | 1 | 1 | 0 | 1 |
| FA3(8の位) | 1 | 0 | 1 | 0 | 1 |
この表から和の各桁を下から順に読むとS₀=1,S₁=0,S₂=0,S₃=0となり、最後のFA3のCoutが1なので、5bit目が1になる。したがって結果は5bit表示で「1 0 0 0 1」、すなわち**10001(2進数)=17(10進数)**であり、期待していた11+6=17と一致する。
キャリー列と回路の対応も注記しておく。「FA0で発生したCout=0」は「FA1へのCin=0」として渡り、「FA1で発生したCout=1」は「FA2へのCin=1」として渡り、「FA2で発生したCout=1」は「FA3へのCin=1」として渡っている。上の筆算図の「繰り上がり」の上段(左から1,1,0,0)は、FA3・FA2・FA1それぞれが受け取ったCin、および最終的にFA3から出るCout(=5bit目の1)に対応する。
---
## 休憩所④: まとめ箱 — 第四章のポイント
```
リップルキャリー加算器 = 全加算器(FA)を4つ数珠つなぎにした4bit加算回路
接続規則: 下の桁のCout → 上の桁のCin(水が低→高へ伝わるようにキャリーが伝播)
最下位(FA0)のCinは常に0固定。最上位(FA3)のCoutが5bit目の結果になる
検算: 1011(11) + 0110(6) = 10001(17) ← FA0〜FA3の全段で実測・一致確認済み
```
---
## 第五章: 2の補数による減算 — 引き算専用の回路を作らずに済む理由
ここまでで足し算の回路(リップルキャリー加算器)が完成した。次の課題は引き算である。素朴に考えると「引き算専用の回路(減算器)」を別途設計する必要がありそうだが、実は**2の補数(にのほすう)**という工夫を使うことで、**足し算の回路だけを使い回して引き算を実現**できる。
### 5-1. 2の補数とは何か
2の補数とは、ある2進数に対して「足すとちょうど桁あふれして0になる(その桁数の範囲では)」ような数のことである。4bitの世界(0000〜1111の16通り)で考えると、ある数Xの2の補数は「16からXを引いた数」に等しい。
作り方には簡単な手順がある。
1. 元の数の**全ビットを反転**させる(0を1に、1を0に。これを1の補数と呼ぶ)。
2. その反転結果に**1を足す**。
この2ステップで2の補数が得られる。
### 5-2. なぜ2の補数を使うと引き算が足し算だけで実現できるのか
「A−B」という引き算は、「A+(−B)」という足し算と数学的には同じ意味である。ここで、Bの2の補数は「−B」を、決まったビット数の世界の中で表現したものになっている。
つまり「Bの2の補数を作り、それをAに足す」という手順は、「Aから普通にBを引く」のと同じ結果を生む。しかも「Bの2の補数を作る」という作業自体も、「全ビット反転(NOTゲートを4つ並べるだけ)」+「1を足す(すでにある加算回路を再利用できる)」という、単純なゲートの組み合わせだけで実現できる。
結果として、引き算専用の新しい回路を用意しなくても、
- 全ビット反転用のNOTゲート(4個)
- 1を足すための小さな加算(既存の加算回路に1を足すだけなので、実質的に既存のリップルキャリー加算器を流用できる)
- Aとの本体の足し算(これも既存のリップルキャリー加算器と同じ回路)
という、すでに手元にある部品だけで引き算が完成する。これが「2の補数を使うと引き算の回路を新規に作らずに済む」ことの核心である。
### 5-3. 検算例: 0111(7) − 0011(3) を2の補数変換→加算で計算する
具体的に4bitの引き算、7−3=4を、2の補数の手順で計算し、答えが正しく4(0100)になることを検算する。
まず引く数B=0011(3)の2の補数を作る。
```
B = 0011 (3)
Bの1の補数(全ビット反転) = 1100 (反転: 0→1,0→1,1→0,1→0)
Bの2の補数 = 1100 + 1 = 1101 (13)
```
次に、A=0111(7)と、Bの2の補数(1101=13)を足す。
```
A = 0 1 1 1 (7)
+ Bの2の補数 = 1 1 0 1 (13)
-----------------------
5bit結果 = 1 0 1 0 0
```
5bit目(先頭の1)は4bitの枠からあふれた分であり、4bit加算回路では自動的に捨てられる(これは「桁あふれ=オーバーフローのキャリーを無視してよい」という2の補数減算の決まりである)。残る4bitを読むと**0100**、すなわち10進数で**4**になる。
```
検算: 7 − 3 = 4 (期待値)
2の補数による計算結果: 0100 = 4 (一致)
```
実際に7+13=20を計算し、20を5bitの2進数(10100)で表し、先頭の1桁を捨てると0100(4)になることを、本書執筆時に実際の数値で計算し、期待値の4と一致することを確認済みである。
---
## 休憩所⑤: まとめ箱 — 第五章のポイント
```
2の補数の作り方: 全ビット反転(1の補数) → +1
引き算 A-B の実現法: Aに「Bの2の補数」を足す(足し算だけで引き算が完成)
桁あふれた最上位ビットは無視してよい(4bitの枠を超えた分は捨てる決まり)
検算: 0111(7) − 0011(3) → Bの2の補数=1101(13) → 0111+1101=10100 → 下4bit=0100(4) 一致
```
---
## 第六章: 乗算の概説 — 「加算の反復」という考え方
引き算まで手に入ったので、最後に掛け算(乗算)にも触れておく。本書では詳細な回路設計までは踏み込まないが、原理だけは押さえておきたい。
乗算の最も素朴な考え方は、**「同じ数を繰り返し足し算する」**というものである。たとえば3×4は、3を4回足すこと(3+3+3+3=12)と同じ意味である。これは10進数でも2進数でも変わらない、算数の基本的な性質である。
この発想をそのまま回路にすると、「加算回路(すでに組み上げたリップルキャリー加算器)を繰り返し使い、決まった回数だけ足し算を繰り返す」という仕組みで乗算が実現できる。実際のコンピュータの内部では、この「繰り返し足す」という発想をもう少し効率化した方式(2進数の各桁ごとに部分積を作り、それらをシフト(桁をずらすこと)しながら一気に足し合わせる方式など)が使われることが多いが、その根底にある考え方は変わらない。**「乗算とは、加算という土台の上に成り立っている操作である」**という点が、本章で押さえておきたい要点である。
なお、除算(割り算)についても、乗算とは逆に「同じ数を繰り返し引き算する」という発想を土台にした方式が存在するが、本書では割り算の詳細には立ち入らない。
---
## 休憩所⑥: まとめ箱 — 第六章のポイント
```
乗算の基本原理 = 加算の反復(3×4 = 3+3+3+3)
回路的には既存の加算回路を繰り返し使うことで乗算が実現できる
実際のコンピュータではシフト(桁ずらし)と組み合わせた効率化方式が使われることが多いが、
土台にある考え方は「乗算は加算の上に成り立つ」という点で変わらない
```
---
## 第七章: 表示の考え方 — 7セグメントディスプレイ
電卓は計算結果を人間が読める数字として表示する必要がある。ここで広く使われてきたのが**7セグメントディスプレイ(セブンセグメントディスプレイ)**という表示方式である。
7セグメントディスプレイは、数字の形を**7本の線分(セグメント)**の組み合わせで表現する。各セグメントには、次のようにアルファベットの記号(a〜g)が割り振られる慣習が広く使われている。
```
── a ──
| |
f b
| |
── g ──
| |
e c
| |
── d ──
```
0〜9の各数字は、この7本のうちどのセグメントを点灯させるかの組み合わせで表現される。点灯するセグメントに1、消灯するセグメントに0を対応させると、これも一種の真理値表(対応表)として整理できる。
### 7-1. 数字とセグメント点灯パターンの対応表
| 数字 | a | b | c | d | e | f | g | 説明 |
|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 中央(g)以外の6本が点灯し「0」の輪郭になる |
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 右側の2本(b,c)だけが点灯 |
| 2 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 上・右上以外・下・左下・中央が点灯 |
| 3 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 上・右上・右下・下・中央が点灯 |
| 4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 右2本・左上・中央が点灯(輪郭は「0」を描かない) |
| 5 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 上・右下・下・左上・中央が点灯 |
| 6 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 右上以外の6本が点灯 |
| 7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 上・右上・右下の3本だけが点灯 |
| 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 全7本が点灯(最も多い点灯数) |
| 9 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 右下以外の6本が点灯 |
この対応表もまた、「入力(表示したい数字0〜9)に対して、出力(a〜g各セグメントの点灯0/1)がどう決まるか」という、本書でここまで扱ってきた真理値表とまったく同じ考え方の応用である。実際のデジタル回路では、この対応関係を実現するために、本書で見てきたAND・OR・NOTなどの論理ゲートを組み合わせた**デコーダ回路**が使われる(内部の具体的なゲート構成には複数の設計流儀があり、本書ではその詳細な回路設計までは扱わない)。
---
## 休憩所⑦: まとめ箱 — 第七章のポイント
```
7セグメントディスプレイ = 数字を7本の線分(セグメントa〜g)の点灯パターンで表現する方式
対応表は「入力(数字)→出力(各セグメントの0/1)」という、真理値表と同じ発想の応用
8は全セグメント点灯(7本すべて1)、1は最少のb,cの2本のみが典型的なパターン
```
---
## 実践コーナー — 紙上シミュレーションの三実践解
ここまで論理ゲートから電卓の加算回路まで、すべて紙の上の理屈として組み上げてきた。最後に、実際に自分の手を動かしてこれらを体感的に確認するための、3つの「紙上シミュレーション」を紹介する。いずれも電子部品を必要としない、紙と鉛筆(と指)だけでできる練習である。
### 実践解1: 紙と鉛筆のシミュレーション
第一章〜第三章の真理値表を、白紙に**自分の手で書き写す**練習をしてみよう。表の見出し(入力A・入力B・出力)だけを先に書き、中身のマス目を空欄にしておく。そして0と1のすべての組み合わせについて、実際に「0 XOR 0は?」「1 AND 1は?」と自問しながら、1マスずつ埋めていく。
書き終わったら、本書に載っている真理値表と見比べて、一致しているかを確認する。もし一致しない箇所があれば、それはゲートの定義(「両方1のときだけ1」なのか「どちらか一方でも1なら1」なのか)を取り違えている可能性が高いので、該当するゲートの説明を読み直すとよい。半加算器・全加算器の8行の表まで自力で書き写せるようになれば、回路の構造が体に染み込んだ証拠である。
### 実践解2: 指シミュレーション
指を使って、論理ゲートの動作を体感的に確認する方法である。左手の指を1本立てて「1」、折り曲げて「0」と決める(右手も同様)。
- **ANDの確認**: 左手の指1本と右手の指1本を使い、「両方の指が立っているときだけ、机を軽く2回叩く」というルールで確認する。片方でも折れていれば叩かない。これを4パターン(両方立てる・左だけ立てる・右だけ立てる・両方折る)試すと、ANDの「両方1のときだけ1」という性質が体で分かる。
- **ORの確認**: 「どちらか一方でも指が立っていれば叩く」というルールに変えて同じ4パターンを試す。ANDとの違いは「片方だけ立てたとき」の結果が変わる点である。
- **XORの確認**: 「指の状態が左右で違うときだけ叩く」というルールにする。両方立てたときと両方折ったときは叩かず、片方だけ立てたときだけ叩く。この「両方1のときは叩かない」という点が、ORとの決定的な違いである。
この体感練習は、特にXORとORの違いを混同しやすい人におすすめの確認方法である。
### 実践解3: 表計算的手順(グリッドへの書き込み)
方眼紙やノートの罫線を使い、エクセルのような**格子状のマス目**を用意する。列の見出しに「A」「B」「S1(FA1の和)」「C1」「S2」「Cout」……のように、リップルキャリー加算器の各段の入出力を並べる。
行には、計算したい2つの4bit数(たとえば本書第四章の1011と0110)の各桁を上から順に書き込んでいく。そして列を1つずつ、左(下位桁)から右(上位桁)へ埋めていく。1つ前の列で計算したCoutを、次の列のCinにそのまま転記する、という手続きを機械的に繰り返すだけで、最終的な答えの各桁が格子の右端に並ぶ。
この方法の利点は、**「今どの桁を計算していて、繰り上がりがどこから来たか」を目で追いやすい**ことである。第四章の検算表(FA0〜FA3の一覧)も、実質的にはこの表計算的手順そのものであり、慣れてくれば8bit、16bitと桁数を増やしても同じ手順で計算を延長できる。
---
## 安全に関する注記(必読)
本書はここまで一貫して、**紙の上での論理回路の設計と計算**を扱ってきた。実際の電子部品(抵抗・ICチップ・LEDなど)を使って、本書で扱った回路を現実に組み立ててみたいと考える読者もいるかもしれない。
その場合は、必ず次の点を守ってほしい。**電子工作は、たとえ乾電池程度の低電圧であっても、必ず専門書と保護者(または指導者)の指導のもとで行うこと。特にショート(短絡、回路の意図しない部分同士が直接つながってしまい、部品の破損や発熱・火災につながりうる事故)には十分注意すること。**本書自体は実配線の手順書ではなく、あくまで紙上の思考実験として電卓の回路を組み上げることに専念している。実配線への興味は、この土台の理解があってこそ、より安全に、より深く追求できるものである。
---
## 終章 — 紙の上に生まれた電卓、次の一歩へ
本書では、NOT・AND・OR・XORというたった4種類の単純な部品から出発し、半加算器、全加算器、4bitのリップルキャリー加算器、そして2の補数による減算までを、すべて紙の上の真理値表と検算だけでたどり着いた。1と0の組み合わせパターンを積み重ねていくと、いつの間にか「11+6=17」を正しく計算する回路が出来上がっている、という体験は、論理回路という分野の面白さの核心にある。
本書の道のりを振り返ると、「関数における構造のパターン」を論理ゲートの組み合わせパターンに、「数列」を2進数の桁配列に、そして「その組み合わせで実際に電卓が組み立て上げられる」という構想を、実際に検算し尽くした半加算器・全加算器・4bit加算器・2の補数減算という一連の回路に、それぞれ翻訳してきたことになる。
なお、本書で紙の上に組み上げたこの「回路図の実験室」を、将来的にHTML上でインタラクティブに動かせる**回路シミュレータ**として実装することが、次の波の候補として構想されている。論理ゲートを画面上でクリックで配置し、入力のスイッチを切り替えると即座にS(和)やCout(繰り上がり)の表示が変化する、というような形を想定しているが、これはあくまで今後の予告であり、本書では実装には踏み込まない。紙の上で今回組み上げた回路の設計図が、その際の確かな土台になるはずである。
---
## 学習内容の理解度クイズ(12問)
以下の12問は、本書の内容から出題される。易しい問題から難しい問題まで、4問ずつの構成になっている。
**Q1(易)** NOTゲートの入力がA=1のとき、出力はどれか。
- ① 1のまま変化しない
- ② -1になる
- ③ 0になる
- ④ 不定になる
**Q2(易)** ANDゲートにおいて、出力が1になる入力の組み合わせはどれか。
- ① 入力Aと入力Bが両方とも1のときだけ
- ② 入力Aと入力Bのどちらか一方でも1のとき
- ③ 入力Aと入力Bが異なるときだけ
- ④ 入力Aと入力Bが両方とも0のときだけ
**Q3(中)** XORゲートとORゲートの真理値表を比べたとき、両者の出力が異なるのはどの入力パターンか。
- ① A=0,B=0のときだけ
- ② A=0,B=1のときだけ
- ③ A=1,B=1のときだけ
- ④ A=1,B=0のときだけ
**Q4(易)** 半加算器において、和(Sum)を計算するのに使われるゲートはどれか。
- ① ANDゲート
- ② ORゲート
- ③ NOTゲート
- ④ XORゲート
**Q5(中)** 半加算器において、繰り上がり(Carry)を計算するのに使われるゲートはどれか。
- ① XORゲート
- ② ORゲート
- ③ NOTゲート
- ④ ANDゲート
**Q6(中)** 全加算器(Full Adder)が半加算器(Half Adder)と比べて追加で受け取れる入力は何か。
- ① クロック信号
- ② 下位桁からの繰り上がり入力(Cin)
- ③ 2ビット目の追加の数値
- ④ 表示用の制御信号
**Q7(易)** 全加算器は、半加算器いくつと、どのゲート1つを組み合わせて作られるか。
- ① 半加算器2つとORゲート1つ
- ② 半加算器1つとXORゲート1つ
- ③ 半加算器3つとANDゲート1つ
- ④ 半加算器4つとNOTゲート1つ
**Q8(難)** リップルキャリー4bit加算器で、1011(11)と0110(6)を足すとき、FA1(2の位を担当する全加算器)に入力されるCin(下位からの繰り上がり)の値はどれか。
- ① 1
- ② 不定
- ③ 常に無視される
- ④ 0
**Q9(中)** 2の補数を作る手順として正しいものはどれか。
- ① 全ビットを反転させ、その後1を引く
- ② 最上位ビットだけを反転させる
- ③ 全ビットを反転させ、その後1を足す
- ④ すべてのビットに1を足してから反転させる
**Q10(難)** 0111(7)から0011(3)を2の補数の手順で引き算するとき、0011の2の補数はどれになるか。
- ① 1100
- ② 1101
- ③ 1010
- ④ 0100
**Q11(難)** 乗算(掛け算)の最も基本的な原理として、本書で説明されているものはどれか。
- ① 除算の逆操作を直接回路化したものである
- ② 加算(足し算)を繰り返すことで実現できる
- ③ シフト演算だけで完結し、加算は一切使わない
- ④ 7セグメントディスプレイの点灯パターンを応用したものである
**Q12(難)** 7セグメントディスプレイで数字の「8」を表示するときの点灯パターンとして正しいものはどれか。
- ① a〜gの7本すべてを点灯させる
- ② b,cの2本だけを点灯させる
- ③ gのセグメントだけを消灯させる(6本点灯)
- ④ 中央(g)を含む3本だけを点灯させる
以上でクイズは終わりである。答え合わせは公開版の鍵ファイル(BOOK-0185_answers.json)ではなく、配布された検定用の解答鍵で行うこと。
---
*(本書は§16.22完全性優先の規定内に収まっており、上限超過の明記は不要である。)*
# BOOK-0185 電卓を組み立てる — 論理回路の実験室