经常见到 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/