KiB、MiB与KB、MB那些事

众所周知,1024在程序员里面有一种特殊的含义,以至于现在每年10月24号都变成了程序员节,这是为什么呢?

稍微了解计算机的人可能知道那是因为在计算机系统里面,1024是不同数据计量单位之间转换的进制,但是作为程序员的你应该知道这件事好像并没有那么简单。

如果你使用过Mac OS,也使用过Windows,你会发现同样一块500G大小的硬盘,在Mac系统就是500G,但是在Windows里面却是465G…这又是为什么呢?

还有,为什么你家里的100M的宽带下载速度最大只有12M左右呢?

1、1Byte = 8bit

一个字节等于8位,这是一条铁律,无论在什么系统下,它都是一样的。bit是计算机中最小的数据计量单位,在网络传输中也都是以bit为单位。

但是在很多计算机系统,在显示文件大小的时候都是显示多少字节,也就是Byte单位,比如在Linux系统下用 ls 命令查看文件:

1
2
3
4
jwang@jun:~/Pictures$ ls -l
total 131724
-rwxrwxrwx 1 jwang jwang 47062 5月 20 2019 2019-05-20_22-42.png
-rwxrwxrwx 1 jwang jwang 349995 6月 10 2019 2019-06-10_22-33.png

但是显示字节会导致这个数字特别大,看起来不太直观,所以 ls 命令有一个-h的参数,意思是 human-readable,就是人类可读,因为对于大部分人来说,M、G这种单位看起来更直观。

1
2
3
4
jwang@jun:~/Pictures$ ls -lh
total 129M
-rwxrwxrwx 1 jwang jwang 46K 5月 20 2019 2019-05-20_22-42.png
-rwxrwxrwx 1 jwang jwang 342K 6月 10 2019 2019-06-10_22-33.png

从上述数据可以得出,在Linux系统下 349995 Byte = 342K,其计算过程就是 349995/1024 = 341.7919921875,说明它是1024进制。

本质上说,K、M、G、T单位只是为了更方便的展示数据大小,便于人类查看记忆,计算机最终处理数据的时候都是以字节或者比特为单位。

1
2
3
4
8bit   = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB

为什么是1024呢?因为2的10次方等于1024,所以1024是个整数…

目前Windows、Linux、安卓等大多数操作系统都是采用这套计算方式,但是在苹果系的Mac和IOS里面除外,它们都是以1000为进制,算是个奇葩。

2、硬盘厂商

有人戏说这是硬盘厂商最开始带的坏头,而且还和苹果勾结起来了,在存储硬件领域,都是以1000进制为准,所以一个500GB的硬盘在Mac系统下是实实在在的500GB,但是在Windows下面好像“缩水”了,只有465GB。

至于为什么这么做,目前我是没有查到太多资料,为什么不统一标准呢?现在的硬盘包括SSD都是这样计算,感觉消费者受到了欺骗,明明买个1个TB的硬盘,为什么只有950GB左右?那你为什么还宣传是1个TB?毕竟不是所有人都用Mac系统。

但是同样是计算机硬件的内存条却没有这么做,你买一个8个GB的内存条,就是8个GB,没有“缩水”,看来此事必有蹊跷!

3、迷之单位

说到重点了,这也是最迷惑人的地方,大部分时候我们看到的单位都是KB、MB、GB、TB,但是也许有一天你又看到了KiB、MiB、GiB、TiB这种写法。

如果我告诉你这2种单位是一样的,但是有时候又不一样,你会不会懵逼?

打开你电脑自带的计算器,切换到数据计算模式,你就会发现这2种写法都在,而且是实实在在的有区别,不仅有这些,还有Kib、Kb、Mb这种写法…我特么疯了。

请允许我先上一个总结: KiB、MiB这种带i的实际上是正统的写法,表示的是1024进制,通常情况下会被简写成KB、MB

如果你看到KiB和KB同时出现,那说明,KB表示的是1000进制,KiB表示的1024进制。

至于Kb这里面的这个小b表示的是bit,也就是说 1KB = 8个Kb,因为一个字节等于8bit,同理 1MB = 8Mb,这种写法在电脑上很少见,但是电信运营商在网速带宽上面又搞事情了!!!

回到前面那个问题,我办了一个100M的电信宽带,为什么下载速度只有10多M???电信是不是黑我?

如果你仔细看(电信官网是写清楚了,但也有很多时候直接就写的100M),你会发现所谓的100M宽带实际上是100Mbps,其中ps是per second,放一起的意思就是最大100Mb每秒的下行速度,而100Mb = 12.5MB,所以要除8。

这也算是运营商耍的小心思,为了让数字更好看,它完全是可以用 12.5MBps这种写法。

对于这一点,大家只要记住1个大B = 8个小b就行了,实际上日常生活中,大部分软件或者应用都是显示的大B单位,很少显示b,因为显示b又要x8,数字更大,也不容易读。

4、总结

大部分时候我们看到的是KB、MB、GB都是以1024为进制转换的,但是如果对方使用的是苹果手机或者电脑你就要注意了,Mac里面的100GB在Windows下面就没有100GB了。

如果你看到了KiB、MiB、GiB也不要慌,这是正统的写法,但是如果它和前面那种写法放到一起了,那说明是有意要区分的,这时候的KB、MB、GB就是1000进制。

如果你看到了Kb、Mb、Gb、Kib、Mib、Gib也不要慌,小b代表的是bit,它和大B的之间差8倍。

如果你看到了Kibps、Mbps这种写法,是用来表示网速带宽,ps是per second,每秒的意思。