Search code examples
terminologyconventionsbit

The name of 16 and 32 bits


8 bits is called "byte". How is 16 bits called? "Short"? "Word"?

And what about 32 bits? I know "int" is CPU-dependent, I'm interested in universally applicable names.


Solution

  • A byte is the smallest unit of data that a computer can work with. The C language defines char to be one "byte" and has CHAR_BIT bits. On most systems this is 8 bits.

    A word on the other hand, is usually the size of values typically handled by the CPU. Most of the time, this is the size of the general-purpose registers. The problem with this definition, is it doesn't age well.

    For example, the MS Windows WORD datatype was defined back in the early days, when 16-bit CPUs were the norm. When 32-bit CPUs came around, the definition stayed, and a 32-bit integer became a DWORD. And now we have 64-bit QWORDs.

    Far from "universal", but here are several different takes on the matter:

    Windows:

    • BYTE - 8 bits, unsigned
    • WORD - 16 bits, unsigned
    • DWORD - 32 bits, unsigned
    • QWORD - 64 bits, unsigned

    GDB:

    • Byte
    • Halfword (two bytes).
    • Word (four bytes).
    • Giant words (eight bytes).

    <stdint.h>:

    • uint8_t - 8 bits, unsigned
    • uint16_t - 16 bits, unsigned
    • uint32_t - 32 bits, unsigned
    • uint64_t - 64 bits, unsigned
    • uintptr_t - pointer-sized integer, unsigned

    (Signed types exist as well.)

    If you're trying to write portable code that relies upon the size of a particular data type (e.g. you're implementing a network protocol), always use <stdint.h>.