技術(非IT系)

全加算器とは?仕組みをわかりやすく解説!(桁上げ・キャリー・半加算器との違いなど)

全加算器の意味と役割
当サイトでは記事内に広告を含みます

全加算器は、コンピュータが二進数を計算するときに欠かせない論理回路です。

電卓で大きな数を足したり、パソコンがプログラムを実行したりできる背景には、ビット単位の加算を連続して処理する仕組みがあります。

その中心にあるのが、入力された二つのビットだけでなく、前の桁から届く桁上げも計算できる全加算器です。

半加算器との違い、キャリーの流れ、真理値表の読み方まで押さえると、論理回路やCPUの基礎がぐっと理解しやすくなるでしょう。

全加算器の意味と役割

全加算器の意味と役割

それではまず全加算器の意味と役割について解説していきます。

三つの入力を加算する論理回路

全加算器とは、二進数の1桁分を加算するための組み合わせ論理回路です。

入力には加算したい二つのビットAとBに加え、下位桁から渡されるキャリー入力Cinを使用します。

出力される情報は、現在の桁の計算結果である和Sと、次の上位桁へ渡すキャリー出力Coutの二つです。

つまり、全加算器はA、B、Cinの三つを合計し、SとCoutへ分けて出力する回路と考えるとわかりやすいでしょう。

二進数では各桁に0または1しか入らないため、三つの入力を足した結果は0、1、2、3のいずれかになります。

結果が0ならSは0でCoutは0、結果が1ならSは1でCoutは0です。

結果が2なら二進数で10となるのでSは0、Coutは1になります。

結果が3なら二進数で11となり、SもCoutも1になる仕組みです。

A+B+Cinの計算結果が0の場合はSが0、Coutが0です。

計算結果が1の場合はSが1、Coutが0です。

計算結果が2の場合は二進数の10となるため、Sが0、Coutが1になります。

計算結果が3の場合は二進数の11となるため、Sが1、Coutが1になります。

多桁の二進数演算を支える存在

1桁だけの加算なら、全加算器は一つあれば対応できます。

しかし、CPUやマイコンが扱う数値は8ビット、16ビット、32ビット、64ビットなど、多数の桁で構成されています。

そこで複数の全加算器を横に並べ、ある桁のCoutを次の桁のCinへ接続します。

この接続によって、10進数の筆算と同じように下位桁から上位桁へ桁上げを伝搬させる計算が可能になります。

たとえば4ビットの加算器なら、通常は4個の全加算器を連結して構成します。

最下位ビットには下位桁が存在しないため、Cinを0に固定するケースが一般的です。

一方で、複数の計算結果をつないで処理する場合には、最下位ビットにも前段からのキャリーを入力することがあります。

加算以外にも使われる考え方

全加算器は加算専用の部品に見えますが、演算回路を理解するための基本単位でもあります。

減算は補数を利用して加算へ置き換えられるため、全加算器を応用した加減算器として設計されることが少なくありません。

CPU内のALUと呼ばれる算術論理演算装置でも、加算器の構造は重要な位置を占めます。

また、比較回路、アドレス計算、タイマーのカウント処理などにも、ビット演算とキャリー処理の考え方が関わります。

全加算器を理解する際は、和だけを見るのではなく、次の桁へ渡すキャリー出力に注目することが大切です。

多桁計算では、このキャリーの受け渡しが正確な演算結果を左右します。

真理値表による入出力の関係

続いては真理値表による入出力の関係を確認していきます。

八通りの入力パターン

全加算器にはA、B、Cinという三つの入力があります。

各入力が0または1を取るので、組み合わせは2の3乗で8通りです。

真理値表を使うと、どの入力で和SとキャリーCoutがどう変化するかを一目で確認できます。

A B Cin 入力の合計 S Cout
0 0 0 0 0 0
0 0 1 1 1 0
0 1 0 1 1 0
0 1 1 2 0 1
1 0 0 1 1 0
1 0 1 2 0 1
1 1 0 2 0 1
1 1 1 3 1 1

表を見ると、Sは入力された1の数が奇数のときに1になることがわかります。

一方のCoutは、三つの入力のうち二つ以上が1のときに1になります。

この特徴を押さえると、後述するXORゲートやANDゲート、ORゲートの役割も自然に整理できます。

和Sを表すXOR演算

和Sは、三つの入力の排他的論理和によって表現できます。

排他的論理和はXORと呼ばれ、入力が異なるときに1、同じときに0を出力する論理演算です。

AとBのXORを取り、その結果とCinのXORを取ることでSを求められます。

S=A XOR B XOR Cin

三つの入力に含まれる1の個数が奇数ならSは1になります。

1の個数が0個または2個ならSは0です。

たとえばAが1、Bが0、Cinが1の場合、1の個数は二つです。

合計は2となるため、現在の桁に残るSは0になります。

Aが1、Bが1、Cinが1の場合は1の個数が三つとなり、Sは1です。

このようにXORは、二進数の各桁に残る値を表すのに適した演算です。

キャリーCoutを表す多数決の考え方

キャリー出力Coutは、A、B、Cinのうち少なくとも二つが1なら1になります。

この性質は、三つの入力に対する多数決のような動きとして理解できます。

AとBがともに1の場合、Cinが0でも合計は2なのでキャリーが発生します。

AとCinが1の場合、あるいはBとCinが1の場合も同様です。

Cout=AB+ACin+BCin

ここで並んだ文字はAND演算を表し、+はOR演算を表します。

三つの組み合わせのどれか一つでも成立すれば、Coutは1になります。

キャリーは入力の合計が2以上かどうかを示す信号です。

真理値表で計算を追うだけでなく、この条件として理解しておくと回路式を覚えやすくなります。

半加算器との違い

続いては半加算器との違いを確認していきます。

キャリー入力の有無

半加算器は、二つの1ビット入力AとBを加算する回路です。

出力は全加算器と同じく和SとキャリーCoutですが、下位桁から届くキャリー入力Cinを持ちません。

そのため、半加算器が扱えるのは最下位桁のように、前の桁からの桁上げを考える必要がない場面です。

全加算器は半加算器にCinを加えたものといえますが、役割の差は小さくありません。

多桁の加算では途中の桁に必ずキャリー入力が必要になるため、基本的には全加算器が使われます。

比較項目 半加算器 全加算器
入力数 2個 3個
主な入力 AとB AとBとCin
出力 和とキャリー 和とキャリー
桁上げの受け取り できない できる
適した桁 最下位桁 中間桁と上位桁
多桁加算での用途 単独では限定的 連結して利用できる

半加算器二個から全加算器を作る方法

全加算器は、二つの半加算器と一つのORゲートを組み合わせて構成できます。

最初の半加算器でAとBを加算し、途中の和と途中のキャリーを出力します。

次の半加算器では、途中の和とCinを加算します。

最後に二つの半加算器から出たキャリーをORゲートへ入力し、最終的なCoutを得る流れです。

全加算器は独立した部品として扱われますが、内部の考え方は半加算器の組み合わせで説明できます。

回路図を読むときは、一段目でAとBを処理し、二段目でCinを反映する構造を意識すると理解しやすいでしょう。

この構成は、論理回路を段階的に設計する発想を学ぶ題材としても役立ちます。

単純な回路を組み合わせることで、より複雑な機能を実現できるためです。

最下位桁で半加算器を使う場合

最下位桁では、通常は下から繰り上がってくる桁がありません。

そのため、最下位桁だけを半加算器で処理し、残りの桁を全加算器で構成する設計も理論上は可能です。

ただし、実際の集積回路や設計手法では、部品の種類をそろえるために全桁を全加算器で扱うこともあります。

この場合、最下位桁のCinを0に接続すれば、全加算器は半加算器と同じ加算結果を出力します。

設計の単純化、再利用性、制御信号の扱いやすさなどを考えると、全加算器を統一的に使う利点は大きいといえます。

桁上げとキャリー伝搬の仕組み

続いては桁上げとキャリー伝搬の仕組みを確認していきます。

二進数の筆算との共通点

10進数で58と67を足すとき、一の位で8と7を足して15となり、十の位へ1を繰り上げます。

二進数でも考え方は同じですが、1と1を足した時点で10となるため、桁上げはより頻繁に起こります。

たとえば二進数の0111と0001を加算すると、最下位ビットから順にキャリーが発生します。

各桁の全加算器がキャリーを受け取り、次の桁へキャリーを渡すことで、1000という結果に到達します。

0111

0001

1000

下位ビットで生じたキャリーが、連続して上位ビットへ伝わる例です。

このように、桁ごとの演算だけでは多桁加算は完成しません。

キャリーを正しい順番で次の桁へ送る仕組みがあって初めて、数値全体を正しく計算できます。

リップルキャリー加算器の特徴

全加算器を直列につないだ基本的な多ビット加算器は、リップルキャリー加算器と呼ばれます。

リップルは波紋を意味し、キャリーが下位桁から上位桁へ波のように伝わる様子を表します。

構造がシンプルで理解しやすく、少ない回路要素で実装できる点が魅力です。

一方で、上位桁の演算結果は下位桁のキャリーが確定するまで決まりません。

ビット数が増えるほど待ち時間が長くなり、演算速度の課題につながることがあります。

項目 リップルキャリー加算器の特徴
構成 全加算器を桁ごとに直列接続する
利点 回路が比較的単純で設計しやすい
課題 キャリーが順番に伝わるため遅延が生じる
影響 ビット数が多いほど最上位桁の確定が遅くなりやすい
利用場面 基本学習、小規模回路、速度要求が厳しくない用途

高速化回路につながるキャリーの扱い

高速なプロセッサでは、単純にキャリーが到着するのを待つだけでは処理速度が不足します。

そこで、キャリー先見加算器などの方式を使い、各桁でキャリーが発生する条件をあらかじめ計算します。

入力AとBからキャリーを生成する条件、前段のキャリーを伝搬する条件を分けて扱う考え方が重要です。

全加算器の基本式を理解しておけば、高速加算器がなぜ必要なのかも見通せるようになります。

初心者の段階では、まず直列接続の仕組みを確実に押さえ、その後に高速化の方法へ進むとスムーズです。

論理ゲートによる回路構成

続いては論理ゲートによる回路構成を確認していきます。

XORゲートが担う和の出力

全加算器の和Sを作るためには、一般に二つのXORゲートを使用します。

最初のXORゲートはAとBを比較し、二つの値が異なるときだけ1を出力します。

次のXORゲートは、その出力とCinを比較して最終的な和Sを作ります。

XORゲートは、二進数の加算でキャリーを除いた下位ビットの結果を取り出す役割を果たします。

たとえば1と1をXORすると0となりますが、これは合計2の下位ビットが0になることと一致します。

キャリーは別の回路で処理されるため、和と桁上げを分担できるわけです。

ANDゲートとORゲートが担うキャリー

キャリー出力Coutは、三つのANDゲートと一つのORゲートで表現できます。

ANDゲートではAとB、AとCin、BとCinの各組み合わせを確認します。

どれか二つの入力がともに1なら、その組み合わせに対応するANDゲートが1を出力します。

最後にORゲートがそれらをまとめ、少なくとも一つが1ならCoutを1にします。

キャリー回路は、二つ以上の1を見つけるための論理回路と整理するとよいでしょう。

論理式だけでなく、信号がどの順番で流れるかを回路図上で追う練習も効果的です。

和SとキャリーCoutは、同じ入力を受け取りながら判定条件が異なります。

Sは1の個数が奇数かどうか、Coutは1の個数が二つ以上かどうかを見る点が重要です。

回路図を読むときの確認ポイント

全加算器の回路図を読むときは、いきなり全体を理解しようとせず、信号を二つの流れに分けると見やすくなります。

一つ目はXORゲートを通ってSへ向かう和の流れです。

二つ目はANDゲートとORゲートを通ってCoutへ向かうキャリーの流れになります。

次に、途中で生成された信号がどこで合流するかを確認します。

半加算器二個で構成した図では、各半加算器のキャリー出力がORゲートへ集まる部分が要点です。

シミュレータを使う場合も、入力を一つずつ変えながらSとCoutの変化を観察すると、真理値表と回路図の対応が深まります。

全加算器の活用場面と学習方法

続いては全加算器の活用場面と学習方法を確認していきます。

CPUとALUにおける加算処理

コンピュータのCPUには、数値演算を担当するALUが備わっています。

ALUは加算、減算、論理積、論理和、比較などを実行する回路であり、加算器はその中核の一つです。

プログラム上では単純に足し算の演算子を書くだけでも、内部では多数の論理回路がビット単位の計算を行っています。

アドレスの計算やループ変数の更新、データサイズの算出など、加算はコンピュータ内部で非常に多く使われる処理です。

そのため、全加算器はCPUの動作を理解する入口になる基礎回路といえます。

マイコンとデジタル回路設計での利用

マイコン開発では、通常は内部の演算器を命令として利用するため、全加算器を個別に配線する機会は多くないかもしれません。

それでも、オーバーフローやキャリーフラグの意味を理解するうえで、全加算器の知識は役立ちます。

FPGAや論理回路の設計では、加算回路をHDLで記述し、合成ツールによって回路へ変換する場面があります。

このとき、記述した加算がどのようなキャリー構造になるかを意識できると、速度や回路規模を考える手がかりになります。

デジタル回路の授業、基本情報技術者試験の学習、電子工作の入門でも頻出のテーマです。

理解を深める練習の進め方

全加算器を学ぶなら、最初に二進数の加算を紙に書いて計算するのがおすすめです。

1+1が10になること、1+1+1が11になることを手で確認すると、SとCoutの意味が明確になります。

次に、八通りの入力を使って真理値表を自分で完成させてみましょう。

その後、半加算器から全加算器を組み立てる回路図を描けば、論理ゲートの役割までつながります。

さらに余裕があれば、4ビット加算器を作り、キャリーがどのように伝わるかを追跡すると理解が深まります。

数式、真理値表、回路図、二進数の筆算を往復して学ぶことが、知識を実践的な理解へ変える近道です。

まとめ

全加算器は、A、B、Cinの三つの1ビット入力を加算し、和Sとキャリー出力Coutを得る論理回路です。

半加算器との最も大きな違いは、下位桁から届くキャリー入力を扱える点にあります。

複数の全加算器を接続することで、多桁の二進数加算が可能になります。

和SはXOR演算で表され、キャリーCoutは二つ以上の入力が1かどうかを判定する回路で作られます。

リップルキャリー加算器では構造を簡潔にできる一方、キャリー伝搬による遅延が生じるため、高速な回路では先読み方式なども利用されます。

全加算器は二進数の筆算を電子回路として実現した基本要素です。

真理値表と半加算器の構造を押さえたうえで、多ビット加算器やCPUの演算処理へ視野を広げていくと、デジタル技術の仕組みをより深く理解できるでしょう。