The difference between binary multiples and decimal multiples in computer

metricprefixes

当把你购买的标称500GB硬盘插入电脑格式化后发现电脑上显示只有大约460 gigabytes(严谨的说应该是gibibyte),此时你是否感到疑惑?问题的原因在于硬盘的标称是基于10的对数计量,但是计算机系统却是基于2的对数进行计量的。下面详细对其进行分析。

基于10(decimal)和基于2(binary)的对数表示法

图表链接:https://physics.nist.gov/cuu/Units/prefixes.html
decimal_prefix

图表链接:https://physics.nist.gov/cuu/Units/binary.html
binary_prefix

以上两表中给出了2进制对数和10进制对数的名称和前缀表示,2进制的kibi(1024)和10进制的kilo(1000)是存在数值上的差别的。以下表中列出上述不同表示法数值之间存在的差异

binary_prefix decimal_prefix difference
kibi kilo 2.4%
mebi mega 4.9%
gibi giga 7.4%
tebi tera 10.0%
pebi peta 12.6%
exbi exa 15.3%

回到文章开头文问题,为什么买来标称500GB的硬盘插入电脑格式化后显示只有460多 gibibyte。10进制对数的500GB = 500*1000^3 = 500000000000 byte, 换算成2进制对数: 500000000000 / (1024^3) 约等于465.7 gigibyte。那么为什么存在实际使用中使用的是10进制的GB,但是计算机中表示的是2进制的gigabyte,而且二者之间存在混用的情况?

2进制对数与10进制对数的混用

众所周知,计算机底层使用2进制表示,所以在计算机中使用2进制对数司空见惯。曾经计算机的存储容量较小(几KB级别)时,计算机科学家发现2^10(1024)接近于1024,可以借用SI的kilo来表示1024。并且在差不多20年的时间内,几乎所有能接触计算机的人(价格昂贵,少数专业人士才能接触到)都能了解kilo实际表示的1024。但是几乎在一夜之间(随着技术发展及小型个人计算机的出现),计算机走向了普罗大众。而这些普罗大众并不具备计算机专业知识,在它们的概念中kilo在kilogram和kilomile中都是表示的是10^3,推广到计算机也是当然的。同时,计算机销售人员和商店页沿用了10进制对数的概念,因为这样更易于为普通客户接受。

更多详细资料可参考以下文档
[1] About bits and bytes: prefixes for binary multiples
[2] Prefixes for binary multiples
[3] SI prefixes