Tab Completion

I'm Tab Atkins Jr, and I wear many hats. I work for Google on the Chrome browser as a Web Standards Hacker. I'm also a member of the CSS Working Group, and am either a member or contributor to several other working groups in the W3C. You can contact me here.
Listing of All Posts

How To Pronounce Hexadecimal Numbers

Last updated:

A few months back, <> posted a guide on how to pronounce hex numbers, inspired by a funny scene from Silicon Valley. I love their idea, but I don't actually like the names they came up with - they're really inconsistent in annoying, unnecessary ways.

The basics of any English-like number-naming system are:

  1. Digit names.
  2. "Teen" names, for numbers of the form 1x.
  3. "Xty" names, for numbers of the form x0.
  4. Place names, for grouping larger sets of numbers, like "hundred", "thousand", and "million".

When hex numbers are composed of just decimal digits, #1-#3 are identical to decimal numbers. "45" is still read as "forty five". Similarly, if a "letter" digit shows up in the ones place, it's just read as the letter - "4B" is "forty bee". (The full set of English spellings is "ae", "bee", "cee", "dee", "ee", and "eff".)

X0 (tens) names

The Silicon Valley clip provided an example for #3 - "fleventy", presumably for Fx numbers. Here's my full set of six:

  • A0: atta
  • B0: bitta
  • C0: citta (pronounced "sitta")
  • D0: dickety
  • E0: eckity
  • F0: fleventy

So a number like "f5" is read as "fleventy five", or "BC" as "bitty cee".

The sound pattern here only changes to make b/a more distinct from d/e, and because f's name is already established in the lore, and is pretty fun to say. ^_^ Note that they're reasonably distinct from the existing decimal "tens", too - in particular, 80 (eighty) and A0 (atta) sound fairly different, which is easy to mess up if you're not careful.

1X (teens) names

We can extrapolate these down into teen names, too:

  • 1A: abteen
  • 1B: bibteen
  • 1C: cibteen (pronounced "sibteen")
  • 1D: dibbleteen
  • 1E: ebbleteen
  • 1F: fleventeen

These follow similar patterns, with A-C using one naming scheme (consistently swapping "tta" with "bteen") and D-E using another (swapping "ckity" with "bbleteen").

1A-1E also have the nice advantage that they're noticeably distinct from the A0-E0 names due to them swapping in a voiced consonant, which isn't true of most decimal digits (most of 13-19 sound really similar to 30-90). This only isn't true for fleventy/fleventeen, because I don't have a good answer for it, but at least it's no worse its seventy/seventeen namesake.

Larger place names

The Bzarg naming tool suggests "bitey" as the name for the third digit place, so "100" is "one bitey" (because two hex digits make a byte), then use "halfy" and "worddion" (dd pronounced as a soft "j") for 4 and 8 digits (inspired by 2 bytes being a half-word and 4 bytes being a word). The naming tool reuses "bitey" for 6 digits, which I assume is just an oversight/mistake, as it would be confusing.

I'm not a fan of this - the size of a "word" changes over time anyway (it used to be 2 bytes, now it's 8 bytes on some systems), and it doesn't go any further. Here's a much simpler system that extends as far as our decimal system does. (Or, technically, much further, since decimal names things by how many groups of 1k there are, while this groups them by 16^4, or ~65k)

  • Use "bitey" for 16^2. So, 0xABCD is "atta bee bitey citta dee".
  • If you need to go higher, group into 4 digits, and use "millby", "billby", etc at the end of each group, same as the decimal system with thousand/million/billion/etc. So, 0x1234_5678 is "twelve bitey thirty four millby, fifty six bitey seventy eight".

(a limited set of Markdown is supported)

I think I need this in my life (if for no other reason than to mess with my fellow developers).

Any update on the "naming toy"?


(a limited set of Markdown is supported)