old*_*boy 1 windows powershell hard-drive prefix
我刚刚意识到,在 PowerShell(甚至一般的 Windows 环境)中,大小单位是这样看待的:
1mb ... 1048576 ......... not 1000000
1gb ... 1073741824 ...... not 1000000000
1tb ... 1099511627776 ... not 1000000000000
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释这种疯狂吗?为什么在世界上被1mb认为是1048576而不是1000000?
首先我必须指出,也有大的差异b,并B与后者(字节为8倍大,因为前者()位)。并且前缀也是区分大小写的。没有gor t,而m表示“milli”,它不适用于位或字节等单位大小。像 1 mb = 1 毫比特这样的值没有意义
关于前缀,在计算机相关领域几十年来几乎一直是二进制的,因为电子计算机以二进制运行。如果有人说他们有 1 GB 的 RAM,这意味着他们有 1024 MB 的内存而不是 1000 MB,因为内存芯片的大小总是 2 的幂。与许多其他单位相同,例如硬盘块大小,其中 4K 表示 4096 而不是4000. 下面是一些前缀的例子
对于粗略的转换,只需像正常的 SI 方式一样乘以/除以 10 的幂。如果 2 个单位彼此相距不太远,则结果将足够接近。
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。已经有一个头脑风暴的想法:修复文件大小混淆。
政策
- 应用程序必须对 base-2 单元使用 IEC 标准:
- 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 字节
- 应用程序必须对 base-10 单位使用 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 字节
...
例外
如果以下几点适用,应用程序可以保留其以前的行为以实现向后兼容性。应用程序也可以添加一个选项来显示以 10 为基数的大小。
- 是一个命令行工具
- 通常由机器解析(例如,输出用于脚本)
- 只显示前缀而不显示单位(例如,M 而不是 MB)
属于此规则的一些应用程序是:
- df
- 杜
- ls