全加算器を論理演算で表現しよう

ビット演算の基本回路 and, or, notを利用して
加算器を作ろうと思います。

まず、半加算器(Half Adder)を作りましょう。
1bit入力が2本(A, B)、
1bit出力が2本(Sum, Carry out)あります。

以下に真偽表(入出力の関係)を記します。
A+B=C:S
0+0=0:0
1+0=0:1
0+1=0:1
1+1=1:0

よって、出力は以下のように求まります。
C=A and B (論理積)
S=A xor B  (排他的論理和)
= (A and (not B)) or ((not A) and B)

■全加算器を作ろう
全加算器(Adder)は、
下の位のCarry outを入力に含む、
3つの入力から、2つの出力を算出します。

ABC=C'S 
000=00
100=01
010=01
110=10
001=01
101=10
011=10
111=11

ややこしく見えますが、1か0を3つ合計しているだけです。

■解説
1ビットの3つの数(0∼1)の和は 2ビット(0〜3)に収まる。
1の位は、3つの入力のうち奇数個が1である時のみ、1になる。
2の位は、3つの入力のうち、1が2つ以上ある時のみ、1になる。

■全加算器の論理表現
この条件を論理演算で表現していきましょう。
半加算器の組み合わせでも表現できますが、
あえて原始的な論理演算
(簡略のため xor は使います)
で書いていきましょう。

S=A xor B xor C 
C'= (A and B) or (B and C) or (C and A)

学校で習った電子回路(理科)と集合論理(数学)が
現実の計算機をつながるという、
この加算器の考え方に、
私はCODEという本で初めて触れたのですが、
とても感動したことを今でも覚えています。

今回、基本情報技術者試験の勉強で久々に思い出したので、
まとめてみました。少しでも魅力が伝われば嬉しいです。