A full-adder adds three input bits — two operands , , and a carry-in from the column to the right — and produces a sum and a carry-out . It’s the bit-slice you cascade times to build an -bit adder (the ripple-carry design wires the of stage into the of stage ).

The contrast with a half-adder is the third input. The half-adder ignores any incoming carry and so can only handle bit 0. The full-adder folds the incoming carry in and so works in every column.

Truth table

Eight rows, one per combination of , , :

Two patterns to read off:

  • exactly when an odd number of the three inputs are (one or three of them). That’s three-input XOR.
  • exactly when at least two of the three inputs are . That’s the majority function of three inputs.

Boolean expressions

The carry-out form is convenient because it shares the subexpression with the sum, so the gate that computes also helps compute . Equivalently you can write the carry-out as the symmetric sum-of-products

which is more obviously the “any two of three” majority. Either form is fine; the choice is about gate count and routing.

Circuit

A direct two-level implementation uses XOR/AND/OR gates straight from the equations.

Built from two half-adders

A full-adder is naturally built from two half-adders plus one OR gate. The first half-adder adds and , producing a partial sum and a partial carry . The second half-adder adds and , producing the final sum and a second partial carry . The final carry-out is

— exactly the equation above.

Decomposed view, showing every gate inside the two half-adders:

This decomposition is mostly pedagogical (it shows where the formula comes from). In real silicon you’d implement the full-adder as a single optimised cell.

Latency in a ripple-carry chain

In an -bit ripple-carry adder, the carry has to propagate through every full-adder in turn before the answer is valid. If a full-adder has carry latency , the total worst-case delay is roughly . That linear scaling is the motivation for the carry-lookahead adder, which computes the carries in parallel from the inputs.