经常见到 MiB 和 MB 这两种单位,貌似都是表示 2 的 20 次方个字节。那么它们的区别是什么呢?为什么大家不统一使用 MiB 或者 MB 呢?
前言
当我第一次看到 MiB 的时候,我首先想到的是电影 《黑衣人》(Man in Black) 。不过,我很快就放弃了这个想法,因为它前面的数字大于 4,而《黑衣人》却只有四部。
我很快就意识到它和 MB 是一个意思,毕竟它出现在一个网速监控软件中。我心想,好吧,长知识了。
在这之后的很多年里,我见到了不少 MiB 和 MB,并一直默认它们是同一个意思。直到今天,我开始问自己,既然是同一个意思,为什么大家要选择使用不同的表达方式呢?统一起来不好吗?
带着这个问题,我查阅了网络资料,决定介绍一下它们的前世今生。
李逵 VS 李鬼
“江湖上有名目,提起好汉大名,神鬼也怕。” —— 《水浒传》
历史原因
MB 的全称为 mega-byte,它出现更早,得到了广泛的使用。其中的 “mega-” 是一个乘数词头,缩写为 M,用来表示 10 的 6 次方,中文称为 “兆”。
这个词头是国际单位制词头之一,与之相似的还有 “kilo-”(K,千,10 的 3 次方)“giga-”(G,吉,10 的 9 次方)。
通过观察,我们可以得出:K 是底数,M 为 K 的平方,G 为 K 的立方。
在计算机领域,二进制是更加常用的进制。由于 2 的 10 次方为 1024,接近于 10 的 3 次方,人们就顺便借用了 K 的概念,用它来表示 2 的 10 次方,M 和 G 也是如此。
于是,我们有了下面对这个对应关系:
- (K)10 = 1000 1 = 10 1, (K)2 = 1024 1 = 210
- (M)10 = 10002 = 102, (M)2 = 10242 = 220
- (G)10 = 10003 = 103, (G)2 = 10243 = 230
也就是说,从此,MB 也可以代表 2 的 20 次方个字节(Byte)。
在 1991 年,国际电工委员会(IEC)引入了二进制乘数词头 “kibi-” “mebi-” “gibi-”,并赋予它们缩写 “Ki” “Mi” “Gi”,用来专门表示二进制的次方。
很多组织,如电气电子工程师协会(IEEE)和欧盟(EU)都采用了这个词头。然而,由于缺少官方支持,很多人继续在二进制领域使用国际单位制词头,这就导致了一定程度上的混淆。
如何区分
MiB 的含义是唯一、清晰的,它表示 2 的 20 次方个字节。
MB 的含义会随着使用场景/上下文的变化而变化。在计算机存储领域,它通常表示 2 的 20 次方个字节;在制造业(如笔记本电脑、手机等行业),它通常表示 10 的 6 次方个字节。
遗留问题
于是,在制造业中,有了这样一种奇怪的现象:
- KB 比 KiB 小了 1024 - 1000 = 24 B
- MB 比 MiB 小了 1048576 - 1000000 = 48576 B = 47 KiB
- GB 比 GiB 小了 1073741824 - 1000000000 = 73741824 B = 70 MiB
也就是说,笔记本、手机的包装盒上标的容量为 64 GB,但是操作系统认为它的容量只有 59.6 GiB。消费者难免会奇怪,这少掉的 4.4 GiB 去哪里了?
制造商是有充分的理由继续使用国际单位制词头 K、M、G 的,毕竟它们最初的含义就是十进制的千、兆、吉。
只不过,这会给消费者带来困惑罢了。而对制造商来说,能够多标容量,满足消费者的心理需求,何乐而不为呢?
后语
对于计算机从业者,我们应该尽量使用二进制词头 Ki、Mi、Gi。
对于制造业从业者,这个改变或许很难,希望行业标杆 Apple 可以挺身而出,率先做出改变吧。
参考
本文使用 CC BY-SA 4.0 国际协议 进行许可,欢迎 遵照协议规定 转载。
作者:六开箱
链接:https://lkxed.github.io/posts/binary-prefix/