9.3 Logic circuits
When you compose gates, you get a circuit. Figure 9.9 is the addition circuit from Chapter 1, Doing the Things That Coders Do, that adds two bits, a and b. The sum is the 2-bit number cs, with c being the carry bit. If a = b = 1, then cs is 10.
When I add 16 and 9 in base 10, I say, “add 6 to 9 to get 5, and carry a 1.” The “carry bit” is the analogy in base 2.
Though the circuit has two inputs and two outputs, it is not reversible. If cs is 01, then a could have been 0 and b could have been 1, or the other way around. You can see this in our Python implementation of bit_add:
def bit_add(bit_0, bit_1):
return (bit_0 and bit_1, bit_0 ^ bit_1)
for bit_0 in (0, 1):
for bit_1 in (0, 1):
sum_ = bit_add(bit_0, bit_1)
print(f"{bit_0} + {bit_1...