FE EXAM

加算器のしくみ(半加算器・全加算器)

コンピュータが足し算を行う最も基本的な回路。XORとANDの組み合わせで2進数の加算を実現します。

INTERACTIVE VISUALIZATION
XOR
AND
OR
Carry
A
0
B
0
Sum
0
Carry
0
モード
入力
解説

📌
加算器とは ― コンピュータの足し算

10進数の足し算7 + 5 = 12繰り上がり発生同様に2進数の足し算1 + 1 = 10Sum=0, Carry=1加算器 = 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)の土台になります。

📌
半加算器(Half Adder)― XOR + AND

ABXORANDSumCarryたった2つのゲートで1桁の足し算を実現

半加算器は2つの1ビット入力(AとB)を足して、Sum(和)Carry(桁上げ)の2つを出力する回路です。 内部はXORゲート1つとANDゲート1つだけで構成されます。

「半」と呼ばれる理由は、下位桁からの繰り上がり(Carry In)を考慮できないからです。 筆算でいえば「最下位の桁しか計算できない」ということです。 2桁以上の加算には、繰り上がりも入力できる「全加算器」が必要になります。

半加算器を数式で書くと Sum = A XOR B、Carry = A AND B です。 XORの真理値表が「繰り上がりを無視した足し算の結果」に一致するのが核心のアイデアです。

📌
全加算器(Full Adder)― 繰り上がりも考慮

ABCin半加算器1半加算器2ORSumCout全加算器 = 半加算器2つ + ORゲート1つ

全加算器は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)の有無です。 半加算器は最下位桁の計算にしか使えず、実用的な多桁加算には全加算器が必要です。

📌
リップルキャリー加算器(4ビット)

FA3CFA2CFA1CFA0繰り上がりが右から左へ「波紋」のように伝播する

全加算器をN個つなげるとNビットの加算器が作れます。 下位桁のCout(桁上げ出力)を上位桁のCin(桁上げ入力)に接続していく構成をリップルキャリー加算器と呼びます。

「リップル」は「波紋」の意味で、繰り上がりが最下位桁から最上位桁へ順番に伝わっていく様子を表しています。 上のツールで「4bit加算」モードを選び、スライダーで値を変えると繰り上がりの伝播が見えます。

4ビットでは0〜15の数を扱えます。合計が15を超えると桁溢れ(オーバーフロー)が発生します。 プリセットの「15+1」を試すと、全ビットが繰り上がってオーバーフローする様子を確認できます。

📌
加算の遅延問題と高速化

キャリー先読み加算器(CLA)リップルキャリー: 遅いCLA: 高速桁数が増えるほどCLAの優位性が大きくなる

リップルキャリー加算器には大きな弱点があります。最上位桁の結果を確定するには、最下位桁からの繰り上がりが全桁を順番に伝わるのを待たなければなりません。 64ビットCPUなら64段分の遅延が生じ、高速処理の妨げになります。

この問題を解決するのがキャリー先読み加算器(CLA: Carry Look-Ahead Adder)です。 CLAは全桁の繰り上がりを並列に計算することで、桁数に関わらず一定時間で結果を出せます。 現代のCPUではCLAやその改良版が使われています。

📌
減算の実現 ― 2の補数+加算

引き算 = 足し算に変換できるA - B=A + (-B)-B = Bの2の補数 = ビット反転 + 1減算器は不要、加算器だけで引き算もできる

コンピュータには専用の引き算回路(減算器)は通常ありません。 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の補数の理解はセットで押さえると、減算の仕組みがすっきり理解できます。

練習問題

🎯
基本情報技術者 練習問題

Q1.半加算器の入力A=1, B=1のとき、Sum(和)とCarry(桁上げ)の値はどれか。
A.Sum=0, Carry=0
B.Sum=1, Carry=0
C.Sum=0, Carry=1
D.Sum=1, Carry=1
Q2.全加算器が半加算器と異なる点はどれか。
A.出力が3つある
B.下位桁からの桁上げ入力(Cin)を受け取れる
C.入力が4つある
D.演算速度が半加算器の2倍

関連コンテンツ