A Machine That Can Add
On the 4th year of college I ran into one of the most beautiful things I had ever seen: the adder.
I remember having a hard time containing the enthusiasm: you'd think that computing sums was something reserved for higher order intelligence, so it was mesmerizing seeing it in action by a machine.
In a base-2 adder (i.e. one that operates over binary numbers), you can enumerate all of the possible sums for single digit numbers. For example:
a | b | a + b |
---|---|---|
0 | 0 | 00 |
0 | 1 | 01 |
1 | 0 | 01 |
1 | 1 | 10 |
This table represents all of the values that a + b
take for all possible combinations of a
and b
(e.g. when 0 + 0 = 0
and 0 + 1 = 1
). Notably, 1 + 1 = 10
(1 + 1 = 2
in decimal), which needs two bits to be represented. We'll call that extra bit the carry. For example:
a | b | carry | sum |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 |
It is easy to verify that the following logical expression leads to the same results of addition:
- sum = a xor b
- carry = a and b
With the following truth table:
a | b | c = a && b | s = a xor b |
---|---|---|---|
F | F | F | F |
F | T | F | T |
T | F | F | T |
T | T | T | F |
Interestingly, a circuit can be built using logical gates that can perform these logical operations:
That gives you the ability to add two single-digit numbers: given a
and b
it computes sum
and carry
.
To add numbers with two digits, we take the carry c0
value that was computed in the first digit and combine that with the second digits a1
and b1
:
a1 | b1 | c0 | a1 + b1 | c1 | s1 |
---|---|---|---|---|---|
0 | 0 | 0 | 00 | 0 | 0 |
0 | 0 | 1 | 01 | 0 | 1 |
0 | 1 | 0 | 01 | 0 | 1 |
0 | 1 | 1 | 10 | 1 | 0 |
1 | 0 | 0 | 01 | 0 | 1 |
1 | 0 | 1 | 10 | 1 | 0 |
1 | 1 | 0 | 10 | 1 | 0 |
1 | 1 | 1 | 11 | 1 | 1 |
Which, can be built as the following digital circuit, which is known as the full adder:
The full adder is pretty awesome, because if you keep chaining the carry bits with the next digits to be added, you can sum arbitrarily long binary numbers:
This is a circuit that is capable of computing the sum of two binary numbers.
A machine that can add.