Sign extension’s twin, and the reason the two must be distinguished. Zero extension widens a value by filling the new high bits with zeros: 0x80 → 0x0080 = 128. For an unsigned byte that is exactly right; for a signed byte it is a silent bug, turning −128 into +128. Same input bits, same widening machinery, different fill — and the compiler must pick the right one from the value’s type. It is the MOVZX instruction, and the everyday hazard of mixing signed and unsigned across a width change.
The demo zero-extends 0x80 to 128 and shows sign extension of the same byte gives 65408 — same input, different fill: live demo
“Widening is widening.” — zero-fill and sign-fill give different values for the same bits; picking wrong is a classic bug. cited
The same bits widened two ways — zeros for unsigned, the sign bit for signed, and woe if you swap them. width
On the canonical compiler, zero-extending 0x80 gives 128, while sign-extending the same byte gives 65408: