Every permutation to a wider word needs one operation: move a narrow value into a wide register without changing what it means. For a signed number that is sign extension — copy the sign bit into all the new high bits. The byte 0x80 is −128 as a signed 8-bit value; widened to 16 bits it must become 0xFF80, still −128, not 0x0080 = 128. It is the MOVSX instruction, the cast in every language, and the quiet primitive that makes 8→16→32→64 a value-preserving map rather than a reinterpretation. The load-bearing detail of the whole lineage.
The demo sign-extends 0x80 (−128) from 8 to 16 bits → 0xFF80 (still −128), while a positive value just zero-fills: live demo
“Widening a number just adds zeros.” — for signed values you copy the sign bit, or −1 becomes 255. cited
A narrow value moved into a wide register with its meaning intact — the primitive that makes the word-size ladder a map, not a lie. width
On the canonical compiler, sign-extending 0x80 to 16 bits gives 0xFF80 (65408, = −128); a positive 100 stays 100: