where we are: making it cascadeable
The half adder handles one column. But real binary numbers have many columns, and when you add column N you also need to handle the carry from column N-1. The full adder is the bit-slice that does that.
Three inputs (A, B, carry-in), two outputs (sum, carry-out). Chain N of them with each carry-out feeding the next carry-in, and you can add N-bit numbers. This is the atom of multi-bit arithmetic.
Two half adders (HA1 adds A+B, HA2 adds that plus Cin) and one OR (combines either possible carry). The OR is safe because the two carries are never 1 at the same time.
0 + 0 + 0 = 0
Hit ↺ reset. A = B = Cin = 0. Everything is dark. Display reads 00.
Trace: HA1 sees (0, 0) → sum1=0, c1=0. HA2 sees (0, 0) → S=0, c2=0. OR sees (0, 0) → Cout=0.
1 + 0 + 0 = 1 — click A
Click A. A=1, B=0, Cin=0.
HA1: exactly one input is high → XOR fires. sum1 = 1. AND stays off, c1 = 0. The "sum1" wire lights up.
HA2: receives sum1=1, Cin=0 → again exactly one is high, XOR fires. S = 1. AND off, c2 = 0.
OR: c1=0, c2=0 → Cout = 0. Display reads 01.
The bit travelled A → HA1.XOR → sum1 → HA2.XOR → S. No carries needed yet.
1 + 0 + 1 = 2 — also click Cin
Click Cin. Now A=1, B=0, Cin=1.
HA1 is unchanged (still A=1, B=0): sum1 stays 1, c1 stays 0.
HA2 now sees sum1=1 and Cin=1 — both high. XOR turns off (S=0), and HA2's AND fires: c2 = 1. Watch the c2 wire light up and travel around the bottom into the OR.
OR: c1=0, c2=1 → Cout = 1. Display reads 10.
This is the c2 path: a carry generated by the second half adder. The result, 2, came out as Cout=1, S=0.
1 + 1 + 1 = 3 — also click B
Click B. All three inputs are now 1.
HA1: now A=1, B=1 — both high. XOR turns off (sum1 = 0) and HA1's AND fires: c1 = 1. The sum1 wire goes dark; the c1 wire lights up.
HA2: now sees sum1=0 and Cin=1 — exactly one is high, so XOR fires: S = 1. AND off, c2 goes back to 0.
OR: c1=1, c2=0 → Cout = 1. Display reads 11.
This is the c1 path: a carry generated by the first half adder. The c2 wire went dark; the c1 wire took its place.
summary — both carry paths
You've now seen the four possible output values (0, 1, 2, 3) and both carry paths into the OR:
• c2 path (step 4): sum1 already 1, Cin adds another 1 — HA2 overflows.
• c1 path (step 5): A and B are both 1 — HA1 overflows.
c1 and c2 are never 1 at the same time. (If A=B=1 then sum1=0, so HA2 can't overflow. If sum1=1 then at most one of A and B is 1, so c1=0.) The OR is safe to combine them without needing a "carry of carry."
why this matters
This is the atom of multi-bit arithmetic. Chain N full adders, with each one's Cout feeding the next's Cin, and you can add N-bit binary numbers. That chain is the ripple-carry adder.
A 4-bit adder = 4 of these. A 32-bit adder = 32 of these. Every ALU in every CPU contains some descendant of this circuit.