![与存储容量混淆(10 的幂和 2 的幂)](https://linux22.com/image/1494490/%E4%B8%8E%E5%AD%98%E5%82%A8%E5%AE%B9%E9%87%8F%E6%B7%B7%E6%B7%86%EF%BC%8810%20%E7%9A%84%E5%B9%82%E5%92%8C%202%20%E7%9A%84%E5%B9%82%EF%BC%89.png)
我正在查看硬盘驱动器,发现了一份文档(来自东芝,链接:2.5 英寸 SATA 硬盘 mq01abdxxx) 说的是:
“1 千兆字节 (1GB) 表示 10^9 = 1,000,000,000 字节,以 10 的幂表示。但是,计算机操作系统使用 2 的幂来报告存储容量,其定义是 1GB = 2 ^30 = 1,073,741,824 字节,因此显示的存储容量较小。”
那么 10 的幂大于 2 的幂,好吗。
例如 10^2 = 100 和 2^2 = 4。
但是我不明白文档中关于相同存储容量的说法:
1GB是 1,000,000,000 字节(10 的幂)和 1,073,741,824 字节(2 的幂),那么:它显示的存储容量(2 的幂)较少。为什么较少?如果我看到 1GB 的 2 的幂存储容量比 10 的幂多。
答案1
使用 2 的幂的历史原因是,CPU 使用一行行二进制代码组成的地址空间来访问内存和硬盘。硬件生产商是这样命名的:
2^10 = 1024 and as it's almost 1000 then call it 1 Kilobyte
2^20 = 1048576 bytes and as it's almost 1000000 then call it 1 Megabyte
对于普通用户来说,这是无意义的和繁琐的。此外,“千”、“兆”等前缀与国际单位制(SI) 标准中“1 千瓦”表示 10^3 或 1000 瓦。
为了解决这个问题,在 2000 年国际电工委员会或者 IEC 提出了一种基于 2 的幂的单位表示法ISO/IEC 80000-13。
新名称是将旧名称中的第二个音节替换为“bi”(代表“2”)。千字节现在必须是千字节等等。新单位也有相应的符号,因此“10 kibibyte”现在写为10 千字节代替10 千字节。这是对应表:
Notation Symbol Value
1 kilobyte 1 kB 10^3 = 1000 bytes
1 megabyte 1 MB 10^6 = 1000000 bytes
1 gigabyte 1 GB 10^9 = 1000000000 bytes
1 terabyte 1 TB 10^12 = 1000000000000 bytes
1 kibibyte 1 KiB 2^10 = 1024 bytes
1 mebibyte 1 MiB 2^20 = 1048576 bytes
1 gibibyte 1 GiB 2^30 = 1073741824 bytes
1 tebibyte 1 TiB 2^40 = 1099511627776 bytes
16 年后,许多硬件和软件供应商仍然使用 2 进制单位来表示他们的国际单位制名称。“兆字节”可以表示 1000000 字节或 1048576 字节。
如果您购买了 100 GB 的硬盘,其容量为 100x10^9 或 10^11 字节。但是,这是一个很大的但是,操作系统只会报告该硬盘的容量为 93 GB (10^11)/(2^30)
。您购买了 100技嘉相当于 93吉比字节驱动器。操作系统使用了错误的符号。
驱动器制造商通过免责声明和解释来隐藏这个问题,而这些免责声明和解释总是得出“实际格式化的容量可能较小”的结论。
答案2
简而言之:一切都是为了营销。
jcbermu 解释得很好,但我不同意所有这些背后的原因。
虽然任何信息系统都使用二进制系统,但位和字节都写成 ^2,这是正常的。因此,造成这种混乱的原因不是操作系统或软件。这里的一切都是二进制的。
HDD 制造商以 ^10 系统表示 HDD 容量是他们的错,这会让您损失相当多的实际 GB。20GB HDD 实际上可以存储 18GB 等等……1TB 驱动器实际上约为 930GB。发明“bibyte”这个嘲讽词是为了避免一些混淆,但它在实际应用中完全失败了。
答案3
jcbermu 的回答很好,但我想从不同的角度来看待这个问题。
1GB 为 1,000,000,000 字节(10 的幂)和 1,073,741,824 字节(2 的幂),那么:它显示的存储容量(2 的幂)较少。为什么较少?如果我看到 1GB 的 2 的幂存储容量比 10 的幂多。
存储介质——任何存储介质——可以存储特定数量的可访问位。在通用计算中,它通常以字节或字节的倍数表示,但如果您开始研究例如内存 IC(集成电路、芯片),您会看到它们的内存容量以可访问位表示。
硬盘会存储特定数量的位或字节,出于技术原因,这些位或字节以扇区为单位进行寻址。例如,4 TB 的硬盘可能有 7,814,037,168 个扇区,每个扇区 512 字节,因此存储容量为 4,000,787,030,016 字节。这正是您实际得到的。(实际上,您会丢失一些计算机的簿记信息:文件系统、日志、分区等。但是,字节仍然存在,您只是不能使用它们来存储文件,因为它们是存储有效允许您存储文件的数据所必需的。)
当然,4,000,787,030,016 这个数字有点难以处理。因此,我们选择以其他方式表示该信息。但正如 jcbermu 所说明的,我们选择用两种不同的方式来实现这一目标:以十的幂或以二的幂。
以十的幂表示,4,000,787,030,016 字节等于 4.000787030016 * 10^12 字节,四舍五入后结果非常准确;如果保留四位有效数字,则四舍五入为 4.001 TB,而“tera”的 SI 定义是:10^12。我们的硬盘可以存储超过 4 * 10^12 字节,因此按照 SI 术语,它是一个 4 TB 的存储设备。
以 2 的幂计算,4,000,787,030,016 字节等于 3.638694607 * 2^40 字节,四舍五入不太准确。看起来喜欢较小的数量,因为 3.639 小于 4.001,这对营销不利(当隔壁的制造商以相同的价格出售 4.0 TB 的驱动器时,谁会愿意购买 3.6 TB 的驱动器?)。这是二进制前缀 3.6“太字节”,其中“bi”表示它是二进制数量。
但实际上,它们的字节数完全相同,只是表达方式不同!如果你再计算一下,你会看到 3.638694607 * 2^40 = 4.000787030016 * 10^12,所以最终你得到的是相同的存储容量。
答案4
其他答案已经解决了差异的历史原因,但在我看来,您是在根据数学询问差异。
您说得对,10 的一次幂大于 2 的一次幂,反之,1 GB(10^9 字节)小于 1 GiB(2^30 字节)。
大小反转的解释是,1 千兆字节中的幂(30 次幂)比 1 千兆字节中的幂(9 次幂)多。事实证明,幂的数量对最终大小的影响比每个单独幂的大小更大。
至于为什么以千兆字节 (2^30) 为单位测量时报告的磁盘大小小于以千兆字节 (10^9) 为单位测量时报告的磁盘大小,这很自然,因为测量固定数量时,较大的测量单位会给出较小的数字。例如,考虑以英寸为单位的高度与以厘米为单位的高度。因为一英寸大于一厘米,所以相同的高度测量到的英寸数 (例如 72 英寸) 比厘米数 (例如 183 厘米) 要少。在这两种情况下,高度都是相同的物理距离,但每次测量只是根据测量单位给出不同的数字。