这个问题我开始思考这三种测量尺寸的方法之间的区别:千字节, A千比特和传统的千字节。
我知道这些测量有不同的用途(数据传输速率以比特/秒为单位),但我不太确定我是否能分辨出 Mb 和 MB 和 MiB 之间的区别。
以下是一条评论,摘自这个答案(强调我的)。
C64 有 65536字节RAM。按照惯例,内存大小以千字节,数据传输速率 千比特以及制造商现在想到的海量存储字节硬盘标签上使用 T、G、M 和 k,Windows 报告大小钛, 胃肠,弥和基。那些 1.44MB 的软盘呢?它们既不是 1.44MB,也不是 1.44MiB,而是 1.44 千字节。也就是 1440kiB 或 1'474'560 字节。– 第三
答案1
1 KiB (Kibibyte) = 1,024 B (Bytes) (2^10 Bytes)
1 kb (Kilobit) = 125 B (Bytes) (10^3 Bits ÷ (8 bits / byte) = 125 B)
1 kB (Kilobyte) = 1,000 B (Bytes) (10^3 Bytes)
对于任何 SI 前缀来说,情况都是一样的;k
(1x10 3 )、M
(1x10 6 )、G
(1x10 9 ),因此,扩展而言:
1 MiB (Mebibyte) = 1,048,576 B (Bytes) (2^20 Bytes)
1 Mb (Megabit) = 125,000 B (Bytes) (10^6 Bits ÷ (8 bits / byte) = 125,000 B)
1 MB (Megabyte) = 1,000,000 B (Bytes) (10^6 Bytes)
唯一稍有不同的是 IEC 二进制前缀(kibi/mebi/gibi 等),因为它们是以 2 为基数,而不是以 10 为基数(例如,所有数字都等于 2而不是 10 )。我更喜欢使用 SI 前缀,因为我发现它更容易。另外,加拿大(我的国家)使用公制,所以我习惯了,例如1kg = 1000g
(或1k anything = 1000 base things
)。这些都没有对错之分;只要确保你知道你使用的是哪一个以及它实际上等于什么就行。
为了安抚评论者:
1 Byte (B) = 2 nibbles = 8 bits (b)
这就是为什么,如果你曾经看过十六进制编辑器,你会发现所有内容都被分成两个十六进制字符;每个十六进制字符的大小为一个半字节,而一个字节有两个。例如:
198 (decimal) = C6 (hex) = 11000110 (bits)
答案2
有几个简单易懂的基本术语:
* A bit (b) is the smallest unit of data comprised of just {0,1}
* 1 nibble (-) = 4 bits (cutesy term with limited usage; mostly bitfields)
* 1 byte (B) = 8 bits (you could also say 2 nibbles, but that’s rare)
要在位和字节(带任何前缀)之间进行转换,只需乘以或除以八即可;简单又好。
现在事情变得有点复杂了,因为有两种测量大量数据的系统:十进制和二进制多年来,计算机程序员和工程师对这两者使用相同的术语,但这种混淆最终引起了一些尝试标准化一组适当的前缀。
每个系统都使用一组类似的前缀,这些前缀既可以应用于位,也可以应用于字节。每个前缀在两个系统中开头都相同,但二进制前缀之后听起来就像儿语一样。
十进制以 10 为基数,大多数人都习惯并习惯于使用它,因为我们有 10 个手指。二进制以 2 为基数,大多数计算机都习惯并习惯于使用它,因为它们有两种电压状态。
十进制系统显而易见,对大多数人来说也易于使用(在脑中计算乘法非常简单)。每个前缀增加 1,000(原因完全是另一回事)。
对于大多数非计算机专业人士来说,二进制系统使用起来要困难得多,甚至程序员通常也无法在脑海中计算出任意大数的倍数。尽管如此,这仍然是 2 的倍数。每个前缀增加 1,024。一个“K”是 1,024,因为这是最接近十进制“k”1,000 的 2 的幂(目前可能确实如此,但随着每个连续前缀的增加,差异迅速增加)。
对于具有相同前缀的位和字节,数字是相同的。
* Decimal:
* 1 kilobyte (kB) = 1,000 B = 1,000^1 B 1,000 B
* 1 megabyte (MB) = 1,000 KB = 1,000^2 B = 1,000,000 B
* 1 gigabyte (GB) = 1,000 MB = 1,000^3 B = 1,000,000,000 B
* 1 kilobit (kb) = 1,000 b = 1,000^1 b 1,000 b
* 1 megabit (Mb) = 1,000 Kb = 1,000^2 b = 1,000,000 b
* 1 gigabit (Gb) = 1,000 Mb = 1,000^3 b = 1,000,000,000 b
* …and so on, just like with normal Metric units meters, liters, etc.
* each successive prefix is the previous one multiplied by 1,000
* Binary:
* 1 kibibyte (KiB) = 1,024 B = 1,024^1 B 1,024 B
* 1 mebibyte (MiB) = 1,024 KB = 1,024^2 B = 1,048,576 B
* 1 gibibyte (GiB) = 1,024 MB = 1,024^3 B = 1,073,741,824 B
* 1 kibibit (Kib) = 1,024 b = 1,024^1 b = 1,024 b
* 1 mebibit (Mib) = 1,024 Kb = 1,024^2 b = 1,048,576 b
* 1 gibibit (Gib) = 1,024 Mb = 1,024^3 b = 1,073,741,824 b
* …and so on, using similar prefixes as Metric, but with funny, ebi’s and ibi’s
* each successive prefix is the previous one multiplied by 1,024
请注意,十进制和二进制之间的差异一开始很小(在 1K 时,它们只有 24 字节,相差 2.4%),但随着每个级别而增大(在 1G 时,它们相差 >70MiB,相差 6.9%)。
一般来说,硬件设备使用十进制单位(无论是位还是字节),而软件使用二进制(通常是字节)。
这就是一些制造商(尤其是驱动器制造商)喜欢使用十进制单位的原因,因为它使驱动器大小听起来更大,但当用户看到 Windows 等以二进制形式报告大小时,他们发现实际大小小于预期时会感到沮丧。例如,500GB = 476GiB,因此虽然驱动器被设计为包含 500GB 并被标记为这样,我的电脑显示二进制 476GiB(但显示为“476GB”),因此用户想知道其他 23GB 去了哪里。(驱动器制造商经常在包装上添加脚注,说明“格式化的大小较小”,这具有误导性,因为与十进制和二进制单位之间的差异相比,文件系统开销微不足道。)
由于历史原因,网络设备通常使用位而不是字节,ISP 也经常喜欢使用位来宣传,因为这会使他们提供的连接速度听起来更快:12Mibps 而不是 1.5MiBps。他们甚至经常混合使用位和字节、十进制和二进制。例如,您可能订阅了 ISP 所谓的“12MBps”线路,以为您获得的是 12MiBps,但实际上只收到 1.43MiBps(12,000,000/8/1024/1024)。
答案3
有些答案并不准确。
我们首先做一些笔记:
前缀“kilo”表示 1 000。将“kilo”加到任何单位前面都表示该单位为 1 000。对于“mega”(百万)、“giga”(十亿)、“tera”(万亿)等也是如此。
之所以存在 1 024 而不是简单的 1 000,是因为二进制算术的工作方式。顾名思义,二进制是以 2 为基数的系统(它有 2 个数字:0、1)。它只能用两位数进行算术运算,而我们日常使用的十进制系统(0、1、2...9)则有十位数字。
为了达到 1000 这个数字(公斤) 使用二进制算术时,必须执行浮点计算。这意味着每次运算都必须进位一位二进制数字,直到达到 1 000。在十进制系统中,1 000 = 10 3(您总是将 10 的幂作为十进制数),对于计算机来说,这是一项非常容易和快速的计算,没有“余数”,但在二进制系统中,不可能将 2(您总是将 2 的幂作为二十进制数)提升为任何正整数来得到 1 000。必须使用浮点运算或冗长的加法,这比整数计算 2 10 = 1024 需要更多时间。
您可能已经注意到,2 10 = 1 024 非常接近 1 000,而 1 024 比 1 个有效数字等于 1 000(非常好的近似值),而在以前,当 CPU 速度慢得像只老狗,内存也非常有限时,这是一个相当不错的近似值,而且非常容易使用,更不用说执行速度很快了。
正是出于这个原因,带有“千”、“兆”、“千兆”等前缀的术语仍然存在,其数字并不精确(1 024、2 048、4 096 等)。它们从来都不是精确的数字,而是十进制数字的二进制近似值。它们只是作为“技术”人员使用的行话而出现的。
让事情变得更加复杂的是,电气工程设计联合会已经为半导体存储器电路中使用的单元制定了自己的标准。让我们将一些 JEDEC 单元与国际单位制(标准国际)单位:
Kb = 千位 (JEDEC,1 024 位。注意大写“K”和小写“b”)
kB = 千位 (SI,1 000 位。注意小写“k”和大写“B”)
b = 位(JEDEC,注意小写“b”)
b = ???(SI 没有定义“位”这个词,因此它的使用可能是任意的)
B = 字节(JEDEC,8 位。注意大写“B”)
B = ????(SI 没有定义单词“字节”,并且“B”用于表示“Bel”[如 DeciBel])
KB = 千字节(JEDEC,1 024 字节。注意大写的“K”和“B”)
kb = 千字节(SI,1 000 字节。注意使用小写的“k”和小写的“B”)
重点是,不同的地方使用不同的前缀,其含义也不同。没有硬性规定你应该使用哪一个,但要与你使用的那个保持一致。
由于投票反对,请允许我澄清一下为什么不能通过将 1 提升为任何正整数来得到二进制中的 1 000。
二进制:
+----------------------------------------------------------------------------------+
| 1 024ths | 512ths | 256ths | 128ths | 64ths | 32nds | 16ths | 8ths | 4s | 2s | 0 |
+-----------------------------------------------------------------------------------
请注意,在二进制系统中,列数每次都会加倍。这与十进制系统形成对比,十进制系统每次都会增加 10:
+--------------------------------------------------------------------------+
| 1 000 000ths | 100 000ths | 10 000ths | 1 000ths | 100ths | 10s | 1s | 0 |
+--------------------------------------------------------------------------+
二进制(底数为 2)的前 10 个幂是:
2 0 = 1
2 1 = 2
2 2 = 4
2 3 = 8
2 4 = 16
2 5 = 32
2 6 = 64
2 7 = 128
2 8 = 256
2 9 = 512
2 10 = 1 024
正如您所见,不可能将二进制 2 提升为任何正整数以达到 1 000。