A full adder adds three bits. You can do that in two steps with half adders: add two of the bits, then add the third to the result.
- Half adder 1 adds A and B: sum , carry .
- Half adder 2 adds that sum and the carry-in C: sum S = , carry .
- An OR gate merges the two carries: Cout = .
That's 5 gates: XOR, AND, XOR, AND, OR.
Why is OR enough, rather than another adder? The two carries can never both be 1. Half adder 1 carries only when A = B = 1, but then = 0, and half adder 2 is adding 0 + C, which can't carry. Since they never clash, an XOR would also work for the merge, but OR is the usual choice.
The internal signals have names you'll meet again: is the propagate signal and is the generate signal (generate and propagate). This structure is the starting point for carry-lookahead.