硬盘的容量用了1000进位而不是以2进制为底的1024进位这个问题已经是常识了,但是存储厂商这么标反而是符合标准的。可能有些朋友在Linux和macos中见过容量单位的两个大写字母中插了一个i的,比如KiB、MiB、GiB这样的单位,那么它和我们常用的KB、MB和GB有什么区别呢?
100TL;DR:
KB代表国际单位制标准规定的1000进位,KiB这类中间带个"i"的是1024进位法的标准写法。Windows使用1024进位,但是没有按照标准写,Linux和macOS等很多其他系统使用1000进位,并且按照规范写了。Kb这类代表1000进位,计量单位为bit而不是byte的单位,常见于描述带宽和媒体码率。
还是要扯到二进制与十进制身上。
在国际通用的国际单位制标准(SI)中,对于一个单位的倍数和分数,有着详细的定义。比如对于赫兹这一用于描述频率的导出单位,1000倍时可以称为千赫兹(kHz),1000000(百万)倍时,称为兆赫兹(MHz),再往上以1000倍跳就是吉赫兹(GHz)、太赫兹(THz)……(注意,标准中代表“千”的字母k必须为小写)
而这些放在单位名之前的字母,其实都是一些代表数量的单词的首字母,比如k是kilo,M是mega,G是giga……这些词代表的数有一个特征——它们都是以10为底数的幂。
然而到了计算机工业中,在底层的硬件电路中,通用的是二进制,基于十进制的国际单位制对它没用,反而会带来麻烦。为了方便描述以2为底的大数字幂,工程师们联合了起来,由国际电工委员会(IEC)制定了新的用于1024进位的数字前缀,其实就是将原本对应单词中的最后两位改成了"bi",以代表二进制(binary),而对应的缩写,也从原本的单字母变成了附上"i",比如kB变成KiB,MB变成MiB,全称为kibibytes,mebibytes。
但因为这套标准在1998年才提出,虽然马上写入了ISO标准中,但当时Windows都已经出Windows 98了,所以并没能很好的统一整个计算机业界,很多系统和厂商仍然保持了1 KB=1024 com Bytes的表示方式,并没有附上"i"。内存方面的JEDEC标准也仍然我行我素,采用了与Windows一样的表示方法,所以我们今天在内存上看到的GB、MB等单位都是1024进位的。而硬盘存储业界,仍然使用1 KB=1000 Bytes的国际单位制标准对容量进行描述。
不过在Linux下,有一些程序提供了两种表示方式,但也不是都按照标准来写单位,比如:
macOS里面用的还是SI的1000进位:
再来看到B的大小写区别这个老生常谈的话题上,大写B指的是byte即字节,小写b指的是bit即比特,1 byte = 8 bits。常见使用bit而不是byte来描述的量就是比特率了,比如1000 kb/s,或者写成1000 kbps的形式,都是一样的。而在描述通信带宽的时候也往往会使用bit,比如现在的千兆局域网、百兆光宽带就是1000Mbps、100Mbps而不是1000MB/s、100MB/s,而我们实际看到的文件传输速度使用的是byte来描述,两者有一个八倍的换算关系。
而同样在这里,国际单位制占据了统治的地位,这些使用bit作为单位的量,大部分采用的都是1000进位而不是1024进位,所以在换算的时候还要考虑到这个因素,于是,我们在Windows下能够看到的百兆宽带最大的理论速度就变成了:
100 Mb/s = 100 × 1000 × 1000 = 100,000,000 b/s
100,000,000 b/s = 12,500,000 B/s = 12,207.03125 KiB/s = 11.92 MiB/s
同理,因为Windows并不遵守规范,所以这个最终显示给你的数字是11.92MB/s,但切记,这不是正确的表示方法。