如何换算字节、KB、MB、GB、TB(以及 PB)
理解二进制与十进制的区别,在字节单位之间换算,并避开常见陷阱。
为什么有两种不同的"MB"?
买一块 1 TB 硬盘,插上后操作系统显示 931 GB。硬盘"少"了 69 GB。这不是 bug、欺诈或格式错误。这是二进制和十进制的混淆,根植于我们命名存储的方式。
核心问题是:你用 1,000(十进制,SI 标准)还是用 1,024(二进制,计算机内部实际做法)来换算?
- 1 KB = 1,000 字节(十进制,硬盘厂商使用,SI 标准)
- 1 KiB = 1,024 字节(二进制,老 Windows 称之为"KB",RAM 使用此单位)
为消除歧义,IEC 在 1998 年引入了新的二进制前缀:KiB(kibibyte,2^10)、MiB(mebibyte,2^20)、GiB(gibibyte,2^30)、TiB(tebibyte,2^40)、PiB(pebibyte,2^50)。实际上,旧标签在技术文档之外的任何地方都被沿用,大多数操作系统也不一致:macOS 存储用十进制,Windows 混用,Linux 各发行版各异。
本文讲解数学原理、惯例以及三种可靠的换算方法。
精确公式
十进制(SI,硬盘厂商、网络速度使用)
``` 1 KB = 1,000 B = 10^3 B 1 MB = 1,000 KB = 1,000,000 B = 10^6 B 1 GB = 1,000 MB = 1,000,000,000 B = 10^9 B 1 TB = 1,000 GB = 1,000,000,000,000 B = 10^12 B 1 PB = 1,000 TB = 10^15 B ```
二进制(IEC,RAM、文件格式、部分操作系统使用)
``` 1 KiB = 1,024 B = 2^10 B 1 MiB = 1,024 KiB = 1,048,576 B = 2^20 B 1 GiB = 1,024 MiB = 1,073,741,824 B = 2^30 B 1 TiB = 1,024 GiB = 1,099,511,627,776 B = 2^40 B 1 PiB = 1,024 TiB = 2^50 B ```
十进制和二进制的比值增长很快:营销上的"1 TB"是 1,000,000,000,000 字节,但你的操作系统在格式化和元数据开销后可能显示 931 GiB 可用空间。这个差距随容量增大而扩大 —— 一块"1 PB"硬盘大约是 0.89 PiB。
速查表
| 字节 | 十进制 (SI) | 二进制 (IEC) | |--------:|--------------------|------------------------| | 1,000 | 1 KB | 0.977 KiB | | 1,024 | 1.024 KB | 1 KiB | | 1,000,000 | 1 MB | 0.954 MiB | | 1,048,576 | 1.049 MB | 1 MiB | | 10^9 | 1 GB | 0.931 GiB | | 2^30 | 1.074 GB | 1 GiB | | 10^12 | 1 TB | 0.909 TiB | | 2^40 | 1.100 TB | 1 TiB | | 10^15 | 1 PB | 0.888 PiB |
方法一:使用 UtilBoxx 数据存储换算工具(推荐)
在 B、KB、MB、GB、TB 和 PB 之间换算最快、最安全的方式是 UtilBoxx 数据存储换算工具。它支持十进制和二进制两种模式,可选择精度,完全在浏览器中运行 —— 无上传、无注册、无文件记录。
使用方法:
- 打开 utilboxx.com/zh/tools/unit/data
- 在任意一个输入框(B、KB、MB、GB、TB 或 PB)输入数值
- 选择十进制(SI)或二进制(IEC)模式
- 其他输入框即时更新
- 复制结果
为什么推荐这个方法:
- 100% 免费,无注册、无邮箱、无广告
- 隐私优先:不离开你的浏览器
- 十进制和二进制模式,一键切换
- 六个单位双向换算
- 高精度 —— 不会因浮点四舍五入而失真
- 任何有浏览器的设备都能用
如果你经常引用文件大小、硬盘容量或内存容量,这个工具能让你避免反复犯 1024 vs 1000 的错误。
方法二:macOS Finder(以及其他操作系统的文件管理器)
如果你只需要知道某个特定文件的精确字节数,操作系统的文件管理器可以以十进制给出完整精度的答案。
在 macOS Finder 中:
- 右键点击任意文件,选择显示简介(或按 Cmd+I)
- 大小以十进制单位显示:KB、MB、GB
- 点击大小字段可在字节、KB、MB、GB 之间切换
- 精确字节数显示在括号里
在 Windows 文件资源管理器中:
- 右键点击文件,选择属性
- 大小以 KB、MB 或 GB 显示(Windows 不同版本二进制和十进制混用)
- 想要精确字节数,如果 Windows 报告的是二进制 KB,则除以 1,024;现代 Windows 10/11 实际上在某些对话框中报告二进制,另一些用十进制
在 Linux 中:
- `ls -l file` 显示精确字节数
- `ls -lh file` 显示人类可读大小(大多数发行版默认使用二进制;有些用十进制 —— 查看你的 `alias ls`)
这个方法适合想知道某个特定文件或文件夹的大小时使用,但无法帮你做批量换算或单位之间的数学运算。
方法三:Python(或任何语言)
对于编程换算,几行 Python 就能覆盖所有六个单位。`bit_length()` 方法返回一个整数表示所需的位数 —— 在为缓冲区大小时很有用。
```python # 十进制 (SI) 换算 def to_bytes(value, unit): units = {"B": 1, "KB": 1e3, "MB": 1e6, "GB": 1e9, "TB": 1e12, "PB": 1e15} return value * units[unit]
# 二进制 (IEC) 换算 def to_bytes_binary(value, unit): units = {"B": 1, "KiB": 210, "MiB": 220, "GiB": 230, "TiB": 240, "PiB": 2*50} return value units[unit]
# 整数的 bit_length n = 123456789 print(n.bit_length()) # 27 bits ```
Python REPL 中的单行命令:
```python # 1 GiB 转字节 1024 1024 1024 # 1073741824
# 1 TB 转 GiB 1_000_000_000_000 / (2**30) # 931.3225746154785
# 5 PB 转 TiB 5 1e15 / (2*40) # 4547.473508864641 ```
JavaScript 中同样的思路:
```js const GiB = 1024 ** 3; const TB_in_bytes = 1e12; console.log((TB_in_bytes / GiB).toFixed(3)); // 931.323 ```
方法四:命令行(macOS/Linux)
大多数 shell 都内置了数学计算,macOS 自带的计算器可以处理大数:
```bash # bash 中使用 awk awk 'BEGIN { printf "1 TB in GiB = %.3f\n", 1e12 / (2^30) }' # 1 TB in GiB = 931.323
awk 'BEGIN { printf "1 GiB in bytes = %d\n", 2^30 }' # 1 GiB in bytes = 1073741824
# 仅 macOS:使用 units units "1 TB" "GiB" # 931.32257
# 仅 Linux:numfmt 内置于 coreutils numfmt --to=iec --suffix=B 1000000000000 # 931G numfmt --to=si --suffix=B 1073741824 # 1.1G ```
`numfmt` 工具在 shell 脚本中特别有用:它接受带可选单位的数字并重新格式化,同时支持十进制(--si)和二进制(--iec)模式,并能正确处理负数。
常见问题
为什么我的"1 TB"硬盘显示 931 GB?
硬盘厂商使用十进制:1 TB = 1,000,000,000,000 字节。操作系统通常以二进制显示,虽然他们称之为 GB,但实际是 GiB。1,000,000,000,000 字节 ÷ 1,073,741,824 字节/GiB = 931.32 GiB。"少"的部分就是十进制和二进制的差,加上格式化、分区表和文件系统元数据的开销。
MB 比 MiB 大吗?
是的。MB 是十进制(1,000,000 字节),MiB 是二进制(1,048,576 字节)。MiB 比 MB 大约 4.86%。同样的规律适用于 KB vs KiB、GB vs GiB、TB vs TiB。
内存用二进制还是十进制?
内存的售卖和寻址都用二进制。一条"16 GB"的内存是 16 GiB(17,179,869,184 字节),系统也这样报告。营销上的"GB"按 SI 标准严格来说是不准确的,但惯例根深蒂固,没人尝试把内存重新标记为"GiB"。
网速呢?
网络设备历来对每秒位数(1 Mbps = 1,000,000 比特/秒)使用十进制。许多 ISP 也以十进制宣传,但用字节/秒和比特混用报价,导致"我付了 100 Mbps 但我只能拿到 12 MB/s"的经典困惑。除以 8(比特转字节)并考虑开销,100 Mbps 大约是 11-12 MB/s。数学没错,单位让人糊涂。
KB 和 KiB 哪个大?
KiB 更大。1 KiB = 1,024 B,而 1 KB = 1,000 B。KiB(kibibyte)比 KB(kilobyte)大 2.4%。同样的模式:MiB > MB,GiB > GB,TiB > TB,PiB > PB。
为什么行业没有统一标准?
在标准层面是统一的。IEC 自 1998 年起正式使用二进制前缀(KiB、MiB、GiB),SI 标准也明确说"千"等于 1,000。但二进制前缀在日常使用中并未取代旧标签。Apple 的 GB 和 TB 一致使用十进制。Microsoft 对内存用二进制,存储用十进制。Linux 工具则分裂。结果是永久的歧义,唯一可靠的办法是知道你在任何给定上下文中面对的是哪种惯例。
结论
字节、千字节、兆字节、吉字节、太字节和拍字节并不互换,十进制和二进制的差距随每一步升级而扩大。公式很简单 —— 十进制除以 1,000,二进制除以 1,024 —— 但难的是记住用哪个。
要快速得到答案,UtilBoxx 数据存储换算工具 一键完成任意模式的计算。要查看某个特定文件的大小,操作系统文件管理器给出精确字节数。要做批量或脚本工作,Python 的算术运算或 `numfmt` 命令行无可替代。拿不准时,看末尾的"i":KiB、MiB、GiB、TiB、PiB 永远表示二进制。