コンピュータが足し算を行う最も基本的な回路。XORとANDの組み合わせで2進数の加算を実現します。
加算器は、コンピュータが足し算を行うための電子回路です。 私たちが筆算で1桁ずつ足して繰り上がりを処理するのと同じように、 加算器も2進数の各桁を論理ゲートの組み合わせで足し合わせます。
2進数では 0+0=0、0+1=1、1+0=1、1+1=10(繰り上がり)の4パターンしかありません。 この計算は、下の桁(Sum)がXOR、繰り上がり(Carry)がANDで表せます。
上のツールで「半加算器」モードを選び、A=1, B=1にすると、Sum=0(XORの結果)、Carry=1(ANDの結果)となる様子を確認できます。 これがコンピュータの演算装置(ALU)の土台になります。
半加算器は2つの1ビット入力(AとB)を足して、Sum(和)とCarry(桁上げ)の2つを出力する回路です。 内部はXORゲート1つとANDゲート1つだけで構成されます。
「半」と呼ばれる理由は、下位桁からの繰り上がり(Carry In)を考慮できないからです。 筆算でいえば「最下位の桁しか計算できない」ということです。 2桁以上の加算には、繰り上がりも入力できる「全加算器」が必要になります。
半加算器を数式で書くと Sum = A XOR B、Carry = A AND B です。 XORの真理値表が「繰り上がりを無視した足し算の結果」に一致するのが核心のアイデアです。
全加算器は3つの入力(A、B、Cin)を受け取り、SumとCout(Carry Out)を出力します。 Cinは下位桁からの繰り上がりで、これにより複数桁の加算が可能になります。 内部は半加算器2つとORゲート1つで構成されます。
動作の仕組みは以下の通りです。
・半加算器1:AとBを加算 → 中間のSumとCarryを得る
・半加算器2:中間SumとCinを加算 → 最終Sumと追加Carryを得る
・ORゲート:2つのCarryのどちらかが1ならCout=1
上のツールで「全加算器」モードにしてA=1, B=1, Cin=1を入力すると、1+1+1=11(2進数)でSum=1, Cout=1になります。 半加算器との違いは「Cinを受け取れるかどうか」だけです。
| 項目 | 半加算器 | 全加算器 |
|---|---|---|
| 入力 | A, B(2つ) | A, B, Cin(3つ) |
| 出力 | Sum, Carry(2つ) | Sum, Cout(2つ) |
| 繰り上がり入力 | なし | あり(Cin) |
| 内部構成 | XOR + AND | 半加算器x2 + OR |
| 用途 | 最下位桁のみ | 全桁に対応 |
半加算器と全加算器の違いの核心は繰り上がり入力(Cin)の有無です。 半加算器は最下位桁の計算にしか使えず、実用的な多桁加算には全加算器が必要です。
全加算器をN個つなげるとNビットの加算器が作れます。 下位桁のCout(桁上げ出力)を上位桁のCin(桁上げ入力)に接続していく構成をリップルキャリー加算器と呼びます。
「リップル」は「波紋」の意味で、繰り上がりが最下位桁から最上位桁へ順番に伝わっていく様子を表しています。 上のツールで「4bit加算」モードを選び、スライダーで値を変えると繰り上がりの伝播が見えます。
4ビットでは0〜15の数を扱えます。合計が15を超えると桁溢れ(オーバーフロー)が発生します。 プリセットの「15+1」を試すと、全ビットが繰り上がってオーバーフローする様子を確認できます。
リップルキャリー加算器には大きな弱点があります。最上位桁の結果を確定するには、最下位桁からの繰り上がりが全桁を順番に伝わるのを待たなければなりません。 64ビットCPUなら64段分の遅延が生じ、高速処理の妨げになります。
この問題を解決するのがキャリー先読み加算器(CLA: Carry Look-Ahead Adder)です。 CLAは全桁の繰り上がりを並列に計算することで、桁数に関わらず一定時間で結果を出せます。 現代のCPUではCLAやその改良版が使われています。
コンピュータには専用の引き算回路(減算器)は通常ありません。 A - B を A + (-B) に変換し、加算器だけで減算を実現します。 -Bは2の補数(全ビット反転+1)で表せます。
たとえば4ビットで 5 - 3 を計算する場合、3の2の補数は 0011→1100+1=1101 です。 5 + 1101 = 10010 となり、4ビット分の 0010(=2)が答えです(最上位の1は捨てる)。 加算器1つで足し算も引き算もできるため、回路を節約できます。
この仕組みは「2の補数」のページで詳しく解説しています。 加算器の理解と2の補数の理解はセットで押さえると、減算の仕組みがすっきり理解できます。