74

Why does the discrepancy in the number of bytes in a kilobyte exist? In some places I've seen the number 1024 (210) while in others it's 1000 (and the difference gets increasingly large with M, G, T, etc.).

This is not a discussion about whether it should be 1024 or 1000 (though you can discuss it in the comments) but about where/when this situation originated and/or became widespread.

As far as I know, Linux and hardware manufacturers never use the 1024 variant. That, and hearsay, make me think MS-DOS made this version common, but what are the facts?

18
  • 23
    One representation is in binary (2^10, or 1024) while the other is in decimal (10^3 or 1000)...
    – Trezoid
    May 23, 2011 at 11:04
  • 14
    If you are looking for specific people to blame, point towards hard drive manufacturers. It makes their devices look like they have more capacity when it is expressed in decimal MBs, GBs, etc. They've always done this I believe but it hasn't been until fairly recently that the gap between decimal and binary has grown wide enough to matter significantly.
    – LawrenceC
    May 23, 2011 at 11:52
  • 24
    @ultrasawblade: You want to blame HDD manufacturers for being one of the only groups that use the term gigabyte correctly?
    – paradroid
    May 23, 2011 at 11:57
  • 14
    It just always seemed to me to be an understood thing that 1K=1024 with anything computer related before 20GB or so drives became commonplace. This also roughly coincides with the time when many non-technical people started using PCs on a regular basis. Vast amounts of computer literature (technical and nontechnical) from the early 90's and before doesn't mention anything about "decimal" KBs or "kibibytes".
    – LawrenceC
    May 23, 2011 at 13:38
  • 13
    @paradroid: gigabyte originally meant 1024 mb (and mb = 1024 kb, etc). It was retconned to mean 1000 because HDD manufactures insisted on using it wrong. Admittedly, this does depend on what you consider "right" since kilo does mean 1000, but within computer science, kilobyte was always 1024 for technical reasons until it was changed in 1999.
    – James
    May 23, 2011 at 15:40

6 Answers 6

63

It goes back quite some time, and is detailed here. It looks like you can blame IBM, if anybody.

Having thought about it some more, I would blame the Americans as a whole, for their blatant disregard for the Système international d'unités :P

13
  • 31
    It's always easy to blame the Americans.
    – Notinlist
    May 23, 2011 at 15:11
  • 13
    @Notinlist: It is a joke.
    – paradroid
    May 23, 2011 at 15:15
  • 5
    It reminds me an epic scene of the Pulp Fiction movie... The one with the question about the "metric system". :-)
    – Rabskatran
    May 23, 2011 at 15:55
  • 7
    @Notinlist It is easy to always blame the Americans. That's why we do it so much. That and the fact that its fun. May 23, 2011 at 15:57
  • 3
    The 1961 entry there is interesting, in that it mentions "65k" - being the first order of magnitude which can show a clear difference between "k=1024" and "k=1000, rounded", it comes down clearly for the latter. In 1964, on the other hand, everyone is using the binary meanings.
    – Random832
    May 23, 2011 at 16:20
27

All computing was low-level at the beginning. And at low level programming the number "1000" is totally useless and they needed prefixes for larger amounts so they reused the SI ones. Everyone knew it in the field, there was no confusion. It served well for 30 years or who knows.

It's not because they were Americans so they needed to break SI at all costs. :-)

There is no programmer who I know and says kibibyte. They say kilobyte and they mean 1024 bytes. Algorithms are full of the powers of 2. Even today, "1000" is a really useless number between programmers.

Saying kibi and mibi is just too funny and draws attention from the subject. We happily give it away to the telecommunication and disk storage sectors :-). And I will write kibibytes on user interfaces where non-programmers may read it.

13
  • 3
    It's even funnier to say when talking about bits - "mibibit"
    – James
    May 23, 2011 at 15:52
  • 3
    I think KiB, etc is supposed to be pronounced kilobinarybyte, etc and not kibibyte.
    – Lie Ryan
    May 23, 2011 at 15:52
  • 3
    @Lie Ryan, using prefixes like "kilobinarybyte" was a proposal that ultimately failed, and had different abbreviations than kibibyte did anyway. See en.wikipedia.org/wiki/Binary_prefix
    – Ben Lee
    May 23, 2011 at 20:12
  • 3
    so would it be fair to pronounce km as kilodecimalmeters?
    – JustJeff
    May 23, 2011 at 21:18
  • 3
    The number 1000 is not "totally useless". "k=1000" has been used in computing since the 1950s. The first computers were actually decimal machines, not binary. Networking speed has always been measured in multiples of 1000. "It served well for 30 years"? Really? Programmers have been complaining about "k=1024" for at least 43 years. en.wikipedia.org/wiki/Timeline_of_binary_prefixes
    – endolith
    Nov 9, 2011 at 1:23
8

It is correct and makes sense for technical people to use 1024 = 1K in many cases.

For end users it is normally better to say 1000 = 1k because everybody is used to the 10-based number system.

The problem is where to draw the line. Sometimes marketing or advertising people do not really succeed in the "translation" or in adapting technical data and language to end users.

10
  • 13
    Technical people should know that 1024 bytes is really a Kibibyte (KiB), but know that the term is not known by non-technical people.
    – paradroid
    May 23, 2011 at 11:20
  • 8
    Who says it's correct? Kilo has meant 1000 for centuries, so IMO they should never have used it for 1024. May 23, 2011 at 12:40
  • 20
    The byte is not an SI unit; KB means "kilobel" (granted, a unit you'd never want to use unless you were describing the sound, if any, produced by the Big Bang.)
    – Wooble
    May 23, 2011 at 13:43
  • 10
    @njd: The C64 has 65536 bytes of RAM. By convention, memory size is specified in kibiBytes, data transfer rates in kilobits, and mass storage in whatever-the-manufacturers-think-of-now-Bytes. Harddrives use T, G, M and k on the label, Windows reports the size in Ti, Gi, Mi and ki. And those 1.44MB floppys? Those are neither 1.44MB nor 1.44MiB, they are 1.44 kilokibibytes. That's 1440kiB or 1'474'560 bytes.
    – Third
    May 23, 2011 at 14:19
  • 5
    The kiB, etc variants are fairly new, though. I don't think they were in use when this problem arose, certainly - I was under the impression they were made exactly to resolve it!
    – Shinrai
    May 23, 2011 at 15:17
3

Blame semiconductor manufacturers (they provide us with binary hardware only)[1]

Better yet: blame logic itself (binary logic is just the most elementary logic).

Better yet: who shall we blame for the wretched decimal system?

It has far more flaws than the binary system. It was based cough on the average number of fingers in the human species cough

Oooo...

[1] I want my quantum three-qubit computer!!! Now!

3
  • 29
    I think you'll find the average number of fingers is less than 10 </pedant>
    – Rory Alsop
    May 23, 2011 at 16:55
  • 1
    @Rory: ^ that was a good laugh
    – user541686
    May 23, 2011 at 19:22
  • 2
    @Rory: "fewer" </pedant>. Or is it? Hang on a minute, I aargh... May 23, 2011 at 20:07
1

1024 is not to be blamed it is a very good thing indeed, as it is the reason computer (digital) can be as fast and as efficient as they are today. Because the computer only use 2 value (0,1) it takes out the hardship and complexity (inaccuracy) of anolog system out of the equation.

It would be more complicated if we said a kilobyte is 1000 bits because 2 to what power is 1000? so even 1 kilobyte would be inaccurate because it will have floating points or an approximation.

But i largely blame marketing for selling a 8 gigabytes* and adding this in the small print

* 1 gigabyte is 1,000,000,000 bytes. 

it is a shame really, that is the same thing with connection speed, your ISP will say 1.5Mbps instead of telling you ~150 kiloBytes. it's just very misleading

9
  • 3
    In saying how large a file of 15682 bits is, or how fast such a file can be transferred over a network, powers of 2 play no role. And that's the context where the most confusion is. May 23, 2011 at 18:59
  • 2
    Ultimately the file is stored in memory pages, which are aligned to binary power boundaries. When sending over TCP, the window size in which packets are sent is multiples of powers of two. When the file is stored on the hard drive, it's stored in blocks of powers of two. I understand what you're saying, but kilobyte = 1024 (or at least multiples of powers of two) is ingrained in computing too much.
    – FryGuy
    May 23, 2011 at 22:10
  • 1
    to be fair, networking has always used bits as their base.
    – Synetech
    May 24, 2011 at 3:55
  • 1
    The first 5.25" floppy held 109,375 bytes and was advertised as "109.4 Kbytes". I guess they did this for evil marketing reasons, too? You think it would be more logical to write it as "106.8 KB"? And tape drives and processor speeds and modem speeds are all measured in decimal to deceive us? Please.
    – endolith
    Jul 25, 2011 at 21:21
  • 1
    @Ibu: the difference between 1,000,000,000 bytes and 1GB is 0. Indeed, why would floppy manufacturers maliciously inflate their numbers when the difference is so small? They wouldn't. They used 1000s because it's logical, obvious, and correct, not because they're part of a conspiracy to defraud customers. Hard drive manufacturers have been measuring in 1000s since the MB years, too, for the same reason.
    – endolith
    Jul 25, 2011 at 23:14
0

When you consider that numbers on computers are binary, and 2^10 is 1024, it makes perfect sense. It's much easier to work with 1024 rather than 1000, because you can easily divide by 1024 using only integer math and bit shifting. Dividing by 1000 is a much more expensive operation, which may need floating point math.

E.g.

bytes = 1 073 741 824
kilobytes = bytes >> 10 = 1 048 576
megabytes = kilobytes >> 10 = 1024
gigabytes = megabytes >> 10 = 1
2
  • You seriously think the computation time is relevant? Why don't computers process "km" as "1024 m", then, if it's so hard to convert?
    – endolith
    Jul 25, 2011 at 21:24
  • @endolith Yes I think so, at least historically. While it may be negligible today, in the early days when every CPU-cycle was at a premium, a quick and easy calculation that gave an decent answer would be preferable for something like this. Especially if people knew by convention that 1KB meant 1024 bytes. Jul 31, 2011 at 10:47

Not the answer you're looking for? Browse other questions tagged .