論理回路の授業で必ず出てくる半加算器・全加算器ですが、XORやANDやORのゲートを組み合わせた回路図を見た瞬間に「なんだかごちゃごちゃしていて分からない」と感じてしまう人は多いと思います。自分もそうでした。ゲートの記号自体は覚えていても、それがどう繋がって、なぜ足し算になるのかがイメージできず、回路図を見るたびに止まっていました。ですが、実際に0と1の具体的な数値を1つずつ入れて、信号が回路の中をどう流れていくかを追いかけてみると、驚くほどすんなり理解が進みます。この記事では、その「数値を入れて追いかける」やり方を中心に、半加算器と全加算器の仕組みを説明します。
なぜ半加算器・全加算器でつまずくのか
多くの教科書では、いきなり回路図と真理値表が並んで提示され、「この回路はこの真理値表の通りに動きます」という説明で終わってしまいます。回路図には見慣れないXORゲートの記号や、複数のゲートをまたぐ配線が描かれていて、それを目で追うだけでは「結局この回路が何をしているのか」がなかなか掴めません。特に全加算器は半加算器を2つとORゲートを組み合わせた形をしているため、ゲートの数が一気に増えて、余計に複雑に見えてしまいます。
回路図をいきなり全体として理解しようとするのではなく、まず「具体的な数値を1組決めて、その数値が回路の中をどう流れるか」を1本ずつ追いかけることが、理解への近道です。
半加算器の仕組み
半加算器(Half Adder)は、1桁の2進数A、Bを足し算して、和S(Sum)と繰り上がりC(Carry)を出力する回路です。真理値表は次のようになります。
- A = 0, B = 0 のとき、S = 0, C = 0
- A = 0, B = 1 のとき、S = 1, C = 0
- A = 1, B = 0 のとき、S = 1, C = 0
- A = 1, B = 1 のとき、S = 0, C = 1
最後の行、A = 1, B = 1 のときだけ注目してみます。2進数で1 + 1を計算すると、答えは「10」、つまり和の桁は0で、繰り上がりが1になります。だからA = 1, B = 1のときだけS = 0、C = 1になっているわけです。この「繰り上がりが1になるのは、入力が両方とも1のときだけ」という感覚をまず持っておくと、この先の回路図の意味がつかみやすくなります。

この真理値表をよく見ると、Sの列はXOR(排他的論理和)の真理値表と完全に一致し、Cの列はAND(論理積)の真理値表と完全に一致しています。つまり半加算器は、XORゲート1個とANDゲート1個を使って、
- S = A XOR B
- C = A AND B
という2本の式で作れます。回路図を見て「なぜXORとANDを使うのか」がピンとこなかった人も、真理値表を先に埋めてから回路図を見ると、2つの式がそのままゲートに対応しているだけだと分かります。
全加算器の仕組み
半加算器には大きな弱点があります。それは、下の桁からの繰り上がりを受け取る入力がないことです。実際の複数桁の足し算では、下の桁で繰り上がりが発生したら、その1を次の桁の計算に足し込む必要があります。この「下の桁からの繰り上がり」も入力として受け取れるようにしたのが、全加算器(Full Adder)です。
全加算器は、A、Bに加えて、下の桁からの繰り上がりCin(Carry in)も入力に持ちます。入力が3つになるので、真理値表は8パターンになります。ここで、先ほどの「繰り上がりが1になるのは1が2つ以上あるとき」という感覚を使って、具体的に1パターンだけ数値を入れて考えてみます。
A = 1, B = 1, Cin = 1 のとき、3つの入力を全部足すと1 + 1 + 1 = 3です。2進数で3は「11」なので、和の桁Sは1、繰り上がりCoutも1になります。「入力3つのうち1が2つ以上あるから繰り上がる」という考え方を持っておくと、8パターンある真理値表も、いちいち全部覚えなくてもその場で導けるようになります。

全加算器は半加算器2つとORゲートでできている
全加算器の回路図が複雑に見える一番の理由は、実は「半加算器を2つ使っている」からです。全加算器は、次の手順で組み立てられます。
- まず1つ目の半加算器で、AとBを足す。ここで和S1と繰り上がりC1が出る。
- 次に2つ目の半加算器で、S1とCinを足す。ここで最終的な和Sと繰り上がりC2が出る。
- 2つの半加算器から出た繰り上がりC1とC2を、ORゲートに通す。これが最終的な繰り上がりCoutになる。

なぜ最後にORゲートで2つの繰り上がりをまとめるのかというと、C1とC2が同時に1になることはないからです(3つの入力のうち1が2つ以上あるケースを2段階の足し算に分けて処理しているだけなので、繰り上がりが両方から同時に出ることは構造上起きません)。だからANDではなくORで「どちらか片方からでも繰り上がりが来たら1」とするだけで正しく動きます。この理屈を知らずに回路図だけを暗記しようとすると、「なぜここでORを使うのか」がずっと引っかかったままになってしまいます。
先ほどのA = 1, B = 1, Cin = 1の例で、実際にこの3ステップを追いかけてみます。
- ステップ1:1つ目の半加算器にA = 1, B = 1を入力 → S1 = 0, C1 = 1
- ステップ2:2つ目の半加算器にS1 = 0とCin = 1を入力 → S = 1, C2 = 0
- ステップ3:C1 = 1とC2 = 0をORゲートに入力 → Cout = 1
結果は S = 1, Cout = 1 となり、最初に計算した「1 + 1 + 1 = 3 → 2進数で11」という答えとちゃんと一致します。回路図全体を一度に理解しようとせず、こうして1つの具体例を最初から最後まで手で追いかけると、複雑に見えていた回路も「ただの2段階の足し算」だと分かります。

よくある間違い
一番多い間違いは、半加算器と全加算器の入力の数を混同することです。半加算器は入力が2つ(A、B)、全加算器は入力が3つ(A、B、Cin)です。複数桁の足し算回路を設計する問題で、一番下の桁(繰り上がりを受け取らない桁)だけは半加算器を使い、それより上の桁は全加算器を使う、という使い分けを忘れてしまうミスもよく見られます。
もう一つは、ORゲートの部分を「ANDでもいいのでは」と考えてしまうことです。先ほど説明した通り、C1とC2が同時に1になることは構造上ないため、ORでもANDでも真理値表上は同じ結果になりますが、一般的に使われるのはORです。仕組みとして「どちらか一方からでも繰り上がりが来たら1にする」という考え方の方が自然だと理解しておくと、迷わずORを選べるようになります。
よくある質問
Q. 全加算器を複数繋げると何ができるのですか?
A. 全加算器を、下の桁の繰り上がり出力を上の桁の繰り上がり入力に繋ぐ形で複数個並べると、複数桁の2進数の足し算ができる回路になります。これをリプルキャリー加算器と呼びます。CPUの中の加算回路の基本的な考え方も、この延長線上にあります。
Q. 真理値表を全部暗記する必要はありますか?
A. 暗記よりも、「1の数が2つ以上あれば繰り上がる」という考え方を理解しておく方が実用的です。この考え方さえ持っていれば、真理値表はその場で導き出せますし、入力が増えたパターンにも対応しやすくなります。
Q. XORゲートがなぜ使われるのか、ANDやORではダメなのですか?
A. 和の列(S)の真理値表を見ると、A = B のとき0、A ≠ B のとき1になっています。これはANDやORの真理値表とは一致せず、XOR(排他的論理和)の真理値表とちょうど一致する形です。だからANDやORではなく、XORを使う必要があります。
まとめ
半加算器・全加算器は、回路図をいきなり全体として理解しようとすると複雑に見えますが、「1の数が2つ以上あれば繰り上がる」という感覚を持ったうえで、具体的な数値を1組決めて回路の中を最初から最後まで追いかけると、仕組みがはっきり見えてきます。全加算器は半加算器2つとORゲート1個の組み合わせにすぎないという構造さえ押さえておけば、複数桁の加算回路や、その先のCPUの計算回路の理解にもつながっていきます。


コメント