K: (n., adj.) a binary thousand, which isn't a decimal thousand or even really a binary thousand (which is 01000b, or eight), but is the binary number closest to a decimal thousand. This has proven so completely confusing that is has become a standard.
Or has it?
What does “kilo” really mean? Is it 1,000 or 1,024? How about “mega”? The International Systems of Units has precise definitions for these terms, though few computer people abide by their rules. Kilo denotes 1000 decimal, abbreviated “k” (lower case). Mega corresponds to 1 000 000 (abbreviated “M” — upper case) and giga (“G”) is 1 000 000 000.
Now that we understand that, is 16 kb of RAM 16 000 bytes? 16 384 bytes? 16 384 bits? Perhaps the difference between 16 000 and 16 384 isn't much, but the distinction between bytes and bits seems fundamental to me. Most of us assume the context of a discussion will illuminate our meaning. Thus, a 256 Mb RAM chip is a quarter giga bits, yet 256 Mb of RAM in the PC is that many bytes.
How important is the case of the “mega” or “kilo?” Lower case “m” means “milli,” so specifying 4 mb of RAM means we want .004 bytes.
Seems to me that engineering requires precision, yet our basic unit of measurement is poorly understood and erratically applied. Turns out those fun folks at the International Electrotechnical Commission have defined units for binary prefixes. The system is:
2**10 is one kibi, abbreviated Ki. One kibi is 1024.2**20 is one mebi, abbreviated Mi. One mebi is 1 048 576.2**30 is one gibi, abbreviated Gi. One gibi is 1 073 741 824.
These prefixes are contractions of “kilobinary” (kibi), “megabinary” (mebi) and “gigabinary” (gibi).
A byte is abbreviated “B” (capital B, that is), and a bit is, well, “bit”. Don't use the lower-case “b” as it has no meaning.
1 kibibyte is 1 KiB, or 1024 bytes
1 kibibit is 1 Kibit, or 1024 bits
1 mebibyte is 1 MiB, or 1 048 576 bytes
1 mebibit is 1 Mibit, or 1 048 576 bits
1 gibibyte is 1 GiB, or 1 073 741 824 bytes
1 gibibit is 1 Gibit, or 1 073 741 824 bits
The IEC's definitions include binary prefixes for numbers up to 2**60 (exbi, or “Ei”). See NIST's definitions of SI units for more prefixes.
Confusing? You bet. But maybe such standards are needed. Notice I avoided the use of the word “billion,” to Americans it means 10**9, but to engineers in the UK a billion is a million million, or 10**12. See “Names for Large Numbers.” That's not a trillion, since in the UK a trillion is 10**18. I'll bet the USA's 6 trillion dollar debt really makes eyes pop in England.
Churchill said “We are two peoples divided by a common language”. The point of standards is to join rather than separate, to enhance communication rather than obfuscate.
A quick net search found the following:
64 kB (correct for 64 000, but the wrong concept) 6 581 hits
64 kb (meaningless) 64 256 hits
64 KB (meaningless) 25 329 hits
64 Kb (meaningless) 18 339 hits
64 KiB (the one truly correct form) 20 hits
Despite the standard no one uses the correct form. I find the kibi/mebi prefixes rather pedantic and not at all intuitive. However, the fact that a clause like “128 kb of memory” conveys no meaning (is that bits or bytes?) is quite disturbing. Mebi it is time to amend our ways and speak in more precise terms.
Jack G. Ganssle is a lecturer and consultant on embedded development issues. He conducts seminars on embedded systems and helps companies with their embedded challenges. He founded two companies specializing in embedded systems. Contact him at . His website is
Normally right on target, but I think you missed the mark with this article, Jack.
For my undergraduate work I was always taught that the standard convention was 'b' for 'bit' and 'B' for 'Byte'. I was also taught that the prefixes “Kilo” and “Mega” were “borrowed” from the metric system because of their close correlation with the powers of 10 that they represent. All my engineering professors acknowledged that this was done with a wink and a nod that these weren't REALLY 1000 or 1,000,000 but were acceptable in the context of computing so we wouldn't have even MORE strange prefixes invented. (isn't it enough that we have 'bit', 'byte' and 'nibble'?)
With the exception of Best Buy sales associates and marketing ads, I've seen this used pretty consistently in the industry over the last 20 years. It's only in the consumer markets where untrained or careless people are confusing the terms.
PS. I DO agree that the U.S. should adopt the metric system – what happened to the big push to adopt back in the 70's (ahem – i was in elementary school at the time)?
Sr. SW Engr.
I absolutely agree with you: Engineers must be exact.An additional remark:Not only those 50 million UK people say billion is million * million but the whole world, except for the US. We – strange forigners – have several “strange” customs: We use liter, meter, kilogram and all the metric units declared by SI.We quietly hope, one day US will also use international standards. And not only in engineering…
Sandor Fule, Hungary
I agree with you concerning precision, but I don't think it's necessary to have a whole new set of units.
For the 20 years of my career, it's been understood that 'b' is bit and 'B' is byte.
So 1MB is 2^20 bytes, and 1Mb is 2^20 bits.
I worked in the networking industry for quite a few years, and it was always understood that we had 10Mbps and 100Mbps (bps == bits/second) Ethernets.
So I'm not sure I understand what all the confusion is about.
Title: Software Engineer
I was sure that “b” means bit, but after looking up the specs for SEEPROMs they all use the Mbit notation. Then it dawned on me, data rates use “b” for bits and “B” for bytes (Fibre Channel runs at 1.0625Gbps). So, I love Jack's work, but “b” does have a meaning – I just wish it was universal.