我刚刚意识到在 PowerShell 中(甚至是一般的 Windows 环境中),大小单位被视为:
1mb ... 1048576 ......... not 1000000
1gb ... 1073741824 ...... not 1000000000
1tb ... 1099511627776 ... not 1000000000000
有人能向我解释一下这种疯狂吗?为什么会1mb
考虑1048576
而不是考虑呢1000000
?
答案1
这只是你使用哪种进制的问题。以十进制(人类的工作方式)计算,1 MB 等于 100 万字节
- 1兆字节等于1000000字节(十进制)。
- 1 MB = 10 6 B(以 10 为基数,国际单位制)。
在基数 2(二进制)中,数字不是那么四舍五入。
- 1兆字节等于1048576字节(二进制)。
- 1 MB = 2 20 B(以 2 为基数)。
答案2
首先我必须指出大的b
和B
后者之间的差异(字节)是前者的 8 倍(少量)。前缀也区分大小写。没有g
或t
,而m
表示“毫”,不能适用于位或字节等单位大小。像 1 mb = 1 millibit 这样的值没有意义
至于前缀,几十年来,计算机相关领域几乎一直使用二进制,因为电子计算机以二进制运行。如果有人说他们有 1 GB 的 RAM,则意味着他们有 1024 MB 的内存,而不是 1000 MB,因为内存芯片的大小始终是 2 的幂。许多其他单位也是如此,例如硬盘块大小,其中 4K 表示 4096,而不是 4000。以下是一些前缀示例
- 1K = 2· 10 = 1024 ≈ 10· 3
- 1 M = 2 20 = 2 10 K = 1024 × 1024 ≈ 10 6
- 1 G = 2 30 = 2 10 M = 2 20 K = 1024 × 1024 × 1024 ≈ 10 9
粗略换算只需像正常 SI 方式一样乘以/除以 10 的幂即可。如果两个单位相距不太远,结果就会足够接近。
一个新的阶层二进制值的单独前缀于 1995 年提出,但直到近 10 年前 Linux 和 Mac 开始在十进制值中使用前缀时才得到推广
这种转变使得磁盘大小在操作系统更新后突然“改变”(因为旧 MB 大于新 MB),让许多用户感到困惑。Linux 命令行工具仍然使用二进制前缀(可能除了一些用于操作磁盘分区的新工具,这些工具需要根据情况显示十进制或二进制)。由于我上面提到的原因,RAM 大小仍然以二进制形式报告。
Windows 没有采用新的约定,仍然使用前缀只及其二进制值
Ubuntu 的政策细节如下
有两种表示大数的方法:你可以用 1000 = 10 3 (基数为 10) 或 1024 = 2 10 (基数为 2) 的倍数来表示它们。如果你除以 1000,你可能会使用SI 前缀名称,如果你除以 1024,你可能会使用IEC 前缀名称。问题始于除以 1024。许多应用程序使用 SI 前缀名称,有些则使用 IEC 前缀名称。目前的情况很混乱。如果您看到 SI 前缀名称,您不知道该数字是除以 1000 还是除以 1024。已经有一个 Brainstorm 想法:解决文件大小混乱问题。
政策
- 应用程序必须使用 IEC 标准作为 2 进制单位:
- 1 KiB = 1,024 字节(注意:大 k)
- 1 MiB = 1,024 KiB = 1,048,576 字节
- 1 GiB = 1,024 MiB = 1,048,576 KiB = 1,073,741,824 字节
- 1 TiB = 1,024 GiB = 1,048,576 MiB = 1,073,741,824 KiB = 1,099,511,627,776 字节
- 应用程序必须使用十进制单位的 SI 标准:
- 1 kB = 1,000 字节(注意:k 小)
- 1 MB = 1,000 kB = 1,000,000 字节
- 1 GB = 1,000 MB = 1,000,000 kB = 1,000,000,000 字节
- 1 TB = 1,000 GB = 1,000,000 MB = 1,000,000,000 kB = 1,000,000,000,000 字节
...
例外
如果满足以下几点,应用程序可以保留其以前的行为以实现向后兼容性。应用程序也可以添加一个选项以显示十进制的大小。
- 是一个命令行工具
- 通常由机器解析(例如,输出用于脚本)
- 仅显示前缀而不显示单位(例如,显示 M 而不是 MB)
符合此规则的一些应用是:
- 自由度
- 杜
- ls