GB与GiB的名分之争

稍了解计算机二进制原理的,都习惯并理解:计算机中单位换算大都是以2为底的指数倍。 又2^10=1024≈1000,我们常常将每2^10倍和十进制中的1000进行对应,便于人类书写和理解。

1. 磁盘厂商的黑锅

本来这也没什么,大家都遵守1kB=1024B,1MB=1024kB,1GB=1024MB便罢,世界也就太平了。可是,偏偏存储器厂商都喜欢用1000的换算关系。这样用户就犯糊涂了。买到的1T的硬盘,弄到电脑里只能显示900G左右,硬生生的被吃了100G。

不明真相的群众,都怪罪磁盘商“黑心”;或者也就当一种行业标准,默默的忍了。

先不说黑心不黑心,我总无法理解的是,在这一个2进制的世界,为什么磁盘厂商非要用1000做单位?不是找事儿吗?

1.1 国际单位制词头

仔细研究了一下,才发现这锅还真不该磁盘厂商背,但事儿要从国际单位制词头说起。中学学物理时都知道:克是g,千克是kg;类似的还有km,MHz。所谓词头,就是放在基本的单位前,表示乘以一定的倍数,而词头之间的倍数关系,也多是1000;在英文和十进制环境下,这很容易理解,我们知道英文中有thousand、million、billion,却没有中文中的万、亿,所以“万”或“亿”翻译成英文,都要转换为10个thousand或者100个million。

为什么说这事儿不该磁盘厂商背呢,我们查看国际单位制词头,人家已经明确的说明k就是1000,M就是1000,000,而G是1000,0000,000,一切都明明白白,是你们二进制硬往上凑,把k解释为1024,M当成1024^2,G当成1024^3,才导致了这混乱,人家磁盘厂商规矩的很,根本没错啊!

1.2 二进制乘数词头

但法不责众啊,时间长了,错的也变成对的了,最后错到“国际单位制词头”也受不了了,贵圈太乱,OK,你们再来一套词头吧,您是您,别跟我搅和——这就是二进制乘数词头的由来。“国际单位制词头”是国际度量衡大会制定,二进制词头最初由国际电工委员会引入,后也被IEEE采用。但在习惯上,还是没有被大多数人采用,导致这样的误解仍然广泛存在。

简而言之,“二进制词头”就是在“国际单位制词头”加一个i进行区分,比如MiB。下图是维基百科上罗列的二进制词头: IEC

2. 磁盘VS操作系统

现在回头看硬盘上标注的,的确是4TB而不是4TiB,所以磁盘上标注的容量是准确且足额的

硬盘封面显示的单位是TB而不是TiB

但操作系统呢?以Windows 7为例,下面显示一块磁盘的容量是137331994624字节,同时给出的127GB,显然是用1024关系换算的。换句话说,应该写成127GiB更准确。

3. 应对策略

虽说,GB与GiB都有自己的明确含义了,但毕竟还有很多地方在混用,就连操作系统都用错了,更何况其他场合呢。所以,具体场景还是具体对待吧:

  1. 如果有小i的存在,则明确是“二进制词头”,没有任何歧义。
  2. 如果没有小i呢?在计算机环境里,基本上只有硬盘容量是1000倍,其他都用1024倍去解释,比如内存、网速。
  3. 自己使用的时候,如果是1024倍,都尽量使用小i避免歧义。如果没有使用小i,可显示标注换算关系避免歧义(虽然有点麻烦)。

4. 小结

  1. k、M、G等最初都是“国际单位制”的词头,与千米km一样,都是实打实的1000倍。
  2. 计算机圈,为了图方便,想当然地将国际单位制词头解释为1024倍,埋下了祸根。
  3. 磁盘厂商“固守初心”,坚持用1000倍(当然,背后可能就是为了偷工减料吧)。
  4. 为了避免误解,国际电工委员会引入了“二进制词头”,以正视听,明代表1024倍。区别就是添加了小i。
  5. 然而,现实中鲜有人搭理“二进制词头”,该错的还是错;将错就错吧。大家遇到了还是具体环境具体对待吧。