The Bit-Width Compendium

A field guide to processor bitness

Foundations

What “bitness” actually measures

Before we can argue about whether the Motorola 68000 was a 16-bit or a 32-bit chip, we need a vocabulary precise enough to make the argument boring. This page assembles that vocabulary from first principles.

The word, the unit of thought

Every processor has a natural unit of data it is happiest handling: the word. The word size is the width, in bits, of the values that flow through the general-purpose registers and the integer arithmetic logic unit in a single operation. When we call a machine “32-bit,” we are almost always making a claim about its word size. A 32-bit word holds any integer from 0 to 4,294,967,295 (unsigned) or roughly ±2.1 billion (signed, using two's-complement). Double the word and you square the range; that exponential leverage is why each step up the bit-width ladder feels less like an increment and more like a change of scenery.

The word is not merely a number's home. It is the granularity at which the machine thinks. Pointers are usually one word wide, so the word size caps the size of a flat address space. Instructions are often sized in relation to the word. Stack slots, calling conventions, structure padding, and the width of a “natural” loop counter all take their cue from it. Change the word size and you have, in effect, designed a different computer — which is why porting software from 16-bit to 32-bit, or from 32-bit to 64-bit, has repeatedly been one of the industry's largest and most expensive undertakings. For the formal treatment, the encyclopedic entry on the machine word is the canonical starting point.

Registers: the fastest memory in the machine

A register is a small, named store built directly into the processor core, addressable in zero extra cycles because it is the core. The width of the general-purpose registers is the single most defensible definition of a processor's bit-width, because it is the width at which the machine performs its actual arithmetic. An 8-bit machine adds two 8-bit registers and produces an 8-bit result plus a carry flag; to add 16-bit numbers it must chain two instructions and propagate the carry by hand. A 64-bit machine does the same 64-bit addition atomically, in one instruction, in one cycle.

Register count matters almost as much as register width, though it is a separate axis. The 8-bit Z80 and the 32-bit ARM both felt more spacious than their contemporaries partly because they offered generous register files, letting compilers keep more values in fast storage and touch slow memory less often. When the x86-64 architecture doubled the general-purpose register count from eight to sixteen alongside widening them to 64 bits, the extra registers delivered a measurable performance win that had nothing to do with the larger integers.

; 8-bit machine: adding two 16-bit values needs two steps
        LDA  loNumA        ; load low byte of A
        CLC                ; clear carry
        ADC  loNumB        ; add low byte of B  -> carry may be set
        STA  loResult
        LDA  hiNumA        ; load high byte of A
        ADC  hiNumB        ; add high byte + carry from the low add
        STA  hiResult      ; 16-bit sum assembled from two 8-bit adds

Two buses, often mismatched

Outside the core, two buses connect the processor to the rest of the machine, and the perennial confusion about bit-width lives in the gap between them.

The data bus

The data bus carries operands and results between the CPU and memory. Its width sets how many bits cross per transfer, which is a throughput question, not an arithmetic one. Designers have always been willing to narrow the data bus below the register width to save pins, package cost and board complexity. The canonical example is the Intel 8088: internally a 16-bit 8086, but bolted to an 8-bit external data bus so it could reuse cheap 8-bit support chips. That single cost-driven compromise put a 16-bit CPU into the original IBM PC at a price the market would bear, and arguably decided the shape of the personal-computer industry.

The address bus

The address bus names memory locations. The number of address lines, raised as a power of two, gives the size of the address space. Crucially, the address bus width is independent of the register width. Eight-bit home computers paired 8-bit registers with 16 address lines to reach 64 KiB. The 16-bit 8086 used 20 address lines — via segmentation — to reach 1 MiB. Even modern 64-bit chips do not wire all 64 address bits; implementations have historically decoded 48 (and later 52 or 57) bits, because 2⁴⁸ bytes is 256 tebibytes and nobody has yet needed to name more.

Rule of thumb. When a specification quotes one bit-width but the machine behaves strangely around memory, look for a second, mismatched width. “16-bit CPU, 8-bit bus” (the 8088), “32-bit CPU, 24-bit addresses” (the 68000), and “64-bit CPU, 48-bit addresses” (early x86-64) are three of the most consequential mismatches in the field.

Endianness and alignment: the fine print of width

Once a word spans more than one byte, the machine must decide in what order those bytes live in memory. Store the least-significant byte first and you have a little-endian machine (the x86 lineage); store the most-significant byte first and you are big-endian (the classic 68000 and many network protocols). Neither is “correct,” but mixing them without care corrupts every multi-byte value that crosses between systems — which is why network byte order was standardized and why htonl() exists.

Alignment is the other tax that width levies. Many architectures fetch memory most efficiently — or only legally — when a value of width W sits at an address that is a multiple of W. Wider words mean stricter natural alignment, and compilers insert padding inside structures to honour it. Understanding alignment is the difference between a struct that occupies 12 bytes and the same fields, reordered, occupying 8.

Beyond integers: the SIMD footnote

When you read “128-bit” or “256-bit” on a modern processor's spec sheet, it almost never refers to integers or addresses. It refers to the width of the SIMD (single-instruction, multiple-data) vector registers — the SSE, AVX, NEON and SVE units that pack several smaller values side by side and operate on them in parallel. A 256-bit AVX register does not address 2²⁵⁶ bytes of memory; it holds, say, eight 32-bit floats and multiplies all eight at once. This is “width” in the throughput sense of the data bus, taken to an extreme, and it is why a “64-bit” CPU can legitimately advertise 512-bit registers without contradiction.

Now walk through the eras → Or browse the glossary