最近,我研究了通常用于数字存储/计算的 SI 和二进制前缀,但我仍然不确定我是否理解二进制前缀背后的逻辑(实际问题在底部)。
目前的理解(总结):
SI:
看起来很简单,每次你得到“总字节数 == 当前前缀值 * 1,000”时:使用下一个最大的前缀,可以表示为“1000 ^ 1 + 从千开始已经使用的 SI 前缀数量”。很简单。
二进制:
因此,显然当使用 2 的幂作为数据单位时,内存会工作得更好/更容易(老实说,‘系统架构’对此的解释超出了我的理解范围,所以我只能相信他们的话)。此外,在计算机早期,在二进制前缀正式建立之前,一台具有 1024 字节内存的机器(这将是使用 2 的幂突破 1000 字节的最小内存量),设计师决定使用已经建立的 SI 标准并将这个内存量描述为 kB,即使它们实际上并不相等(或多或少“足够接近”)。
这是我的理解开始崩溃的地方,我猜测由于 SI 标准使用公式(基数 1000 ^ 1 + 已用前缀 #)“上升”到下一个前缀,因此二进制中的等效项是(基数 1024 ^ 1 + 已用前缀 #),因为 1024 比使用 2 的幂的 512 或 2048 更接近 1000,因此与 SI 公式更紧密相关。
实际问题:
那么,如果这是正确的,那么在这个时候,为什么要使用二进制前缀呢?只说“1.024 kB”而不是 1 KiB(或任何你测量的单位)真的那么“糟糕”吗?我想将 4 GiB 的 RAM 列为 4.29497 GB 有点愚蠢(这是原因吗?使用四舍五入的数字更容易?)。那,我对这些前缀标准的一般理解是否正确?
如有任何澄清,我们将不胜感激,感谢您的阅读。
答案1
我们使用国际单位制(又称十进制或公制) 术语,因为它们是重量和度量的正确术语(千克 = 1000 克,千米 = 1000 米等),而且它们已经存在很长时间了(公斤-和毫前缀是在 18 世纪引入的,它们源自 2000 年前使用的希腊语和拉丁语 [哈哈] 。我们在适当的时候使用二进制术语(在计算机环境中) 因为在这些上下文中,它们是正确的术语。
但二进制项不到 20 年前推出 和不到 10 年前正式成立。而且它们不是与新概念相伴而生的新术语(例如,“激光”就是如此)。它们是针对既定概念的新术语(使用了错误的词语)。因此,它们流行起来很慢(因为许多人仍在错误地使用旧术语)。
这让我想起:你似乎对此感到困惑。当某人说“4 GB”时,他指的是 4,294,967,296 字节,他并不是在“四舍五入”,因为他的意思不是“4.294967296 GB”。他的意思是“4 GiB”,他用错了术语。因为他还没有学会新术语,或者因为他不明白为什么差异很重要,或者因为他担心与他交谈的人会理解“GB”而不是“GiB”。二进制术语系统并没有被忽视;它仍处于学习、接受和采纳的过程中。
维基百科对此进行了详尽介绍。例如,二进制前缀文章:
计算机行业历来使用单位千字节,兆字节, 和技嘉以及至少两个略有不同的测量系统中对应的符号 KB、MB 和 GB。在主存储器 (RAM) 容量的引用中, 技嘉通常表示 1 073 741 824 字节。由于这是 1024 的三次方,而 1024 是 2 的幂(2 10),因此这种用法称为二进制前缀。
在大多数其他情况下,行业使用乘数公斤,兆,千兆等,其含义应与其在国际单位制(SI),即 1000 的幂。例如,500 千兆字节硬盘可容纳 500 000 000 000 字节,而 1 Gbit/s(千兆位/秒)以太网连接以 1 000 000 000 比特/秒的速度传输数据。与二进制前缀用法,这种用法被描述为十进制前缀,因为 1000 是 10 的幂(10 3)。
使用相同的单位前缀却有两层含义,这已经引起了混淆。从 1998 年左右开始,国际电工委员会国际电工委员会 (IEC) 和其他几个标准和贸易组织通过发布一组专门指 1024 的幂的二进制前缀的标准和建议来解决这种歧义。因此,美国美国国家标准与技术研究院(NIST)要求国际单位制前缀 仅以十进制意义使用:[1] 千字节和兆字节分别表示一千字节和一百万字节(与 SI 一致),而新的术语如千字节,兆字节和吉比字节,符号为 KiB、MiB 和 GiB,分别表示 1024 字节、1 048 576 字节和 1 073 741 824 字节。[2] 2008 年,IEC 前缀被纳入IEC 80000-13标准。
[据推测,维基百科使用将大十进制数写成三位一组并用空格分隔的惯例,以尊重那些使用.
而不是,
作为“千位分隔符”的人。]
类似的段落也出现在其他页面上。在公制前缀:
在某些信息技术领域,对于某些国际单位制前缀(千、兆、吉),通常以 1024 的幂(而不是 1000)为基础来表示非十进制倍数,这与国际单位制(SI)。这一做法已得到一些行业协会的认可,包括电气工程设计联合会。 这国际电工委员会(IEC)标准化系统二进制前缀 (kibi、mebi、gibi 等等)用于此目的。[23]
并且在公斤-:
计算机科学和信息技术的一些领域普遍使用了第二种定义,但这种定义与国际单位制定义不一致。它使用千来表示 2 10 = 1024,因为数学上巧合的是 2 10 大约等于 10 3。这种应用的原因是二进制值计算领域中原生使用的是基数 2 而不是十进制用于国际单位制前缀。NIST 对这种混乱做出了评论:“面对这一现实,IEEE 标准委员会决定 IEEE 标准将使用传统的、国际上采用的 SI 前缀定义”,而不是 1024 的千。[4]
更多维基百科资源:
超级用户之前也已经解决过这个问题:
- 千字节 (kibibyte)、千比特 (kilobit) 和 千字节 (kilobyte) 之间有什么区别?
(我相信您知道位和字节之间的区别,因此您可以忽略这方面的内容。但请注意,“nibble”也可以拼写为“nybble”。) - K=1024的由来是什么?
- 1 MB 可以表示 1000000 字节、1024000 字节或 1048576 字节,这些是否正确?
想笑的话,请看这个 xkcd 漫画:
(但当然,别太当真)。