Humans count in tens — decimal — almost certainly because we happen to have ten fingers, a system with ten unique digits, 0 through 9, where each additional digit position is worth ten times the one before it. A computer's basic building block, a transistor, doesn't have that luxury of ten easily distinguishable states — reliably telling apart ten different voltage levels, especially at the speed and scale of a modern chip, is far harder than reliably telling apart just two: a switch that's either on or off, current flowing or not. Binary — counting with only the digits 0 and 1 — is a direct, practical consequence of that hardware reality, not an arbitrary design choice.

Binary works exactly like decimal, just with a smaller set of digits and a different value for each position. In decimal, the number 243 means 2 hundreds, 4 tens, and 3 ones, because each position going left is worth ten times the position to its right. In binary, each position going left is worth two times the position to its right instead of ten times, so the binary number 1101 means one 8, one 4, no 2s, and one 1 — 8 + 4 + 0 + 1, which is 13 in decimal. Every value a computer stores or moves — a number, a letter, a color, an entire image — is, underneath, nothing but a long sequence of these on/off binary digits.

The genuine problem with binary is entirely a human one: a binary number long enough to represent anything useful gets unreadably long, fast — a single byte (8 binary digits) can already run 8 characters long, and real values are routinely many bytes. Hexadecimal — base 16, using digits 0 through 9 and then the letters A through F to represent 10 through 15 — exists purely to fix that readability problem, and it does so through a genuinely convenient coincidence: exactly 4 binary digits can represent any hexadecimal digit's full range of values (0 through 15), so a long binary number can be re-grouped, 4 digits at a time, into a hexadecimal number roughly a quarter of the length, with no math or conversion loss at all — just a shorter, more human-readable label for the identical underlying value.

This is exactly why hexadecimal shows up constantly in places a programmer actually looks at raw data directly: a web color code like #FF5733, a memory address in a debugger, a MAC address on a network device. None of these need hexadecimal for the computer's sake — the machine is working in binary regardless, all the way down — hexadecimal exists solely because a human reading #FF5733 processes it far more easily than the 24 raw binary digits it's standing in for.

The practical habit worth having isn't memorizing conversion tables — it's recognizing on sight that binary, decimal, and hexadecimal are three different, equally valid ways of writing down the exact same underlying number, chosen for whichever audience or purpose needs it: binary because that's genuinely how the hardware operates, decimal because that's how people naturally think about quantities, and hexadecimal as the readable middle ground that compresses binary's length without losing any of its underlying precision.

The same four values, written in decimal, binary, and hexadecimal.

DecimalBinaryHexadecimal
131101D
26110101A
25511111111FF
409610000000000001000