potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

情報量の単位KBの変遷とkB、KiB

Windowsではファイルサイズの単位として「KB」をよく見ます。「1 KB = 1024バイト = 210バイト」と思っていましたが、いつからか「1 KB = 1000バイト = 103バイト」という扱いが増えました。

SI接頭辞としては「k = 103」なので後者が正しく見えますが、この「k」は小文字で「KB」の「K」は大文字です。Wikipediaの「キロバイト」を読むと大文字の「KB」はWindowsMacで慣習的に「1 KB = 1024」扱いされていただけで標準ではなかったようです。

想像ですが、「1 KB = 1024バイト」として扱われたのは1000よりも1024の方がCPUの処理が速いからだと思います。1000はかけ算、わり算が必要ですが、1024はそれより高速なビットシフトで済みます。

いつからか「1 KB = 1000バイト」の使い方が記録媒体や通信関係で増えた気がします。「ハードディスク容量○○ GB ※1 GB = 1000 KB、1 KB = 1000バイト」(「※」以降はやけに小さな文字)みたいな。WindowsMacに慣れた消費者は「1 KB = 1024」と誤解してくれるので、容量などが優れていると思い込ませるには便利な単位だったのかなと思います。

そんな曖昧さへのつけ込みを受けてか「KiB」が提案されました。これは「KB」のような曖昧さがなく、厳密に「1 KiB = 1024バイト」と定義されています。

Windowsがこの「KiB」を使うかと思いや、少なくともWindows 10までは「KB」を使用しています。さらにWin32 APIStrFormatByteSizeA function (shlwapi.h) - Microsoft DocsWindows 10では「1 KB = 1000バイト」として扱うと記載されています。

日常でもプログラミングでも言葉の意味や使われ方が変わることはよくある(「青々した」の青、C++auto)ので「KB」の変遷もそのひとつと受け入れていますが、「kB」(小文字、SI接頭辞)も「KiB」もあるのに「KB」が生き残るのは何だか不思議な感じです。

なお「KB」は大文字なのでSI接頭辞の「kB」とまだ区別が付きますが、SI接頭辞も大文字の「GB」や「TB」は事態がより深刻です。