0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
要换算的容量
在厂商使用的十进制单位(kB、MB、GB、TB)、操作系统显示的二进制单位(KiB、MiB、GiB、TiB)和网络使用的比特之间换算容量。输入数值后,除了全部换算结果,你还会看到 1 TB 的硬盘为什么在电脑上显示为 931 GB。
包装盒上或系统中显示的容量
TB 是包装盒上写的,TiB 是系统实际计算的
常见容量
包装盒与操作系统的差别
1 TB厂商标称的容量
931.3226 GB 系统显示的容量 931.3226 GiB 换成真正的单位
字节1,000,000,000,000
厂商把每个词头都算作 1000 字节,所以得出 1,000 GB。操作系统用 1024 的幂来衡量同样的 1,000,000,000,000 字节,于是显示 931.3226 GB,而它实际上是 931.3226 GiB:一个字节都没少,屏幕上的数字却小了 6.87 %。
换算结果
十进制(SI)· 1000 的幂
B字节1,000,000,000,000
kB千字节1,000,000,000
MB兆字节1,000,000
GB吉字节1,000
TB太字节1
PB拍字节0.001
EB艾字节0.000001
二进制(IEC)· 1024 的幂
KiB千二进制字节976,562,500
MiB兆二进制字节953,674.3164
GiB吉二进制字节931.3226
TiB太二进制字节0.9095
PiB拍二进制字节0.0008882
EiB艾二进制字节0.0000008674
比特 · 每字节 8 比特
bit比特8,000,000,000,000
kbit千比特8,000,000,000
Mbit兆比特8,000,000
Gbit吉比特8,000
Tbit太比特8
逐级词头对照
词头
十进制
二进制
差异
Kilo(千)
1 kB1,000 B
1 KiB1,024 B
+2.4 %1 kB = 0.977 KiB
Mega(兆)
1 MB1,000,000 B
1 MiB1,048,576 B
+4.86 %1 MB = 0.954 MiB
Giga(吉)
1 GB1,000,000,000 B
1 GiB1,073,741,824 B
+7.37 %1 GB = 0.931 GiB
Tera(太)
1 TB1,000,000,000,000 B
1 TiB1,099,511,627,776 B
+9.95 %1 TB = 0.909 TiB
Peta(拍)
1 PB1,000,000,000,000,000 B
1 PiB1,125,899,906,842,624 B
+12.59 %1 PB = 0.888 PiB
Exa(艾)
1 EB1,000,000,000,000,000,000 B
1 EiB1,152,921,504,606,847,000 B
+15.29 %1 EB = 0.867 EiB

二进制词头 KiB、MiB、GiB 和 TiB 自 1998 年起由 IEC(80000-13 标准)统一规定,正是为了消除这种歧义。Linux 和 macOS 已经遵守;Windows 资源管理器仍然把实际上的 GiB 标成 GB。

工作原理

存储单位有两种数法,而且两种都没错。硬盘厂商和国际单位制使用的十进制,每一级词头都乘以 1000:1 kB 是 1,000 字节,1 MB 是一百万,1 TB 是一万亿。随计算机而生的二进制则乘以 1024,因为内存和总线都按 2 的幂来寻址。

问题在于几十年来这两套体系用的是同一批名字。Windows 资源管理器写着“GB”的时候,实际算的是吉二进制字节,也就是连除三次 1024。所以一块正好装着一万亿字节的 1 TB 硬盘,在屏幕上显示为 931.32 GB:什么都没少,只是换了把尺子。1998 年以来,IEC 80000-13 标准用二进制词头 KiB、MiB、GiB、TiB 解决了这个歧义。

本工具会把容量同时换算到三套体系——十进制、二进制和比特,并给出精确的字节数、厂商标称的数字和操作系统将要显示的数字,以及两者之间的百分比差异。全部计算都在浏览器中完成。

示例

1 TB931,32 GB硬盘里正好有包装盒承诺的 1,000,000,000,000 字节。系统把它连除三次 1024,显示 931.32 GB,严格来说是 931.32 GiB。屏幕上看起来少了将近 69 GB,硬盘上却一个字节都不少。
1 GiB1073741824 B1 吉二进制字节是 2^30 字节,而十进制的吉字节是 1,000,000,000,所以二进制的要大 7.37 %。你说“一个 G”时心里想的量,和每个程序理解的量,差的就是这个数。
4 TB3,64 TiB词头越大,两套体系差得越远:千级 2.34 %,吉级 6.87 %,太级 9.05 %。所以“硬盘怎么这么小”的感觉,恰恰在大容量硬盘上更明显。
100 Mbit12,5 MB网络链路按比特计,存储按字节计。100 Mbit/s 的链路每秒最多下载 12.5 MB,因为每字节是 8 比特。仅这一条换算,就能解释一半针对网络运营商的投诉。

使用场景

  • 弄懂 1 TB 的硬盘或 64 GB 的 U 盘为什么显示的容量比包装上写的少。
  • 把 API、日志或 ls -l 命令返回的字节数换成看得懂的单位。
  • 在两个用不同尺子计量的工具之间,比较备份或镜像的大小。
  • 当文档写 MiB 而界面写 MB 时,估算配额、卷容量或上传上限。
  • 把链路速率 Mbit/s 换算成真实的下载速度 MB/s。
  • 用数字向客户说明,他买的硬盘并没有比承诺的容量少。

常见问题

我买了 1 TB 的硬盘,却只看到 931 GB,是被坑了吗?

没有。硬盘里有 1,000,000,000,000 字节,在所有厂商使用的十进制体系里,这正是 1 TB 的含义。Windows 拿同样的字节连除三次 1024,得到 931.32,却把结果标成“GB”而不是“GiB”。这是标签问题,不是容量问题:字节一个不少。真正会少掉的是另一回事——格式化时文件系统预留的空间。

GB 和 GiB 有什么区别?

1 GB 是 1,000,000,000 字节(10^9),1 GiB 是 1,073,741,824 字节(2^30),后者大 7.37 %。同样的比例在每一级都会重复:kB 对 KiB,MB 对 MiB,TB 对 TiB。二进制符号中间多一个“i”,读作 kibi、mebi、gibi、tebi。

所有操作系统显示的都一样吗?

不一样,这让人更糊涂。Windows 按 1024 的幂计算,却标成 GB 和 TB,所以 1 TB 的硬盘显示为 931 GB。macOS 从 2009 年起按十进制计量,同一块硬盘就显示为 1 TB。Linux 则要看工具:df -h 和 ls -lh 用 1024,df -H 和 ls -l --si 用 1000,很多工具在该写 GiB 的地方已经写 GiB。硬盘从没变过,变的是量它的人。

为什么内存的容量和包装上写的一致?

因为内存是按 2 的幂制造和寻址的:一条“16 GB”的内存实际上是 16 GiB,也就是 17,179,869,184 字节。操作系统同样按二进制计数,两个数字自然对得上,谁也不会察觉。硬盘正好相反:厂商按十进制数,系统按二进制数,差距一眼就能看出来。

差异会随词头增大多少?

每升一级累积 2.4 %。系统显示的数字在千级小 2.34 %,兆级小 4.63 %,吉级小 6.87 %,太级小 9.05 %,拍级小 11.18 %,艾级小 13.26 %。所以几 kB 的文件里差异察觉不到,而在几拍字节的阵列上就是几百太字节的心理落差。

Mbit 和 MB 是一回事吗?

不是,差了八倍。网络链路按每秒比特计量,存储按字节计量,而 1 字节是 8 比特。300 Mbit/s 的链路最多提供 37.5 MB/s 的下载速度,这还没扣掉各层协议的头部开销。而且网络词头永远是十进制的:1 Mbit 是一百万比特,绝不是 1,048,576。

为什么我的固态硬盘空间还要更少?

在十进制与二进制的差异之外还要再加两件事。第一是预留空间(over-provisioning):主控会留下一部分用户用不到的闪存,用来替换磨损的块并加快写入。第二是文件系统,一格式化就会在表、日志和元数据上占掉空间。这两者都不是故障,而是硬盘能正常工作、能用得久的代价。

那么写文档时该用哪种单位?

用不会让人误解的那种。数值如果按 1024 的幂计算,就写 MiB 或 GiB;如果按 1000 的幂计算,就写 MB 或 GB。在 API 或配置文件里,最稳妥的做法是直接给出字节数,让界面决定怎么显示。这一行代码能省掉好几个小时的争论:为什么两个工具对同一个文件报出不同的数字。