千字节,千位和千字节有什么区别?


45

这个问题让我想了解一下这三种方式测量尺寸之间的差别:一个 kibibyte,一个千位,和传统的千字节

我知道这些测量方法有不同的用途(数据传输速率以位/秒为单位),但是我不确定是否可以区分Mb,MB和MiB。

以下是从此答案中摘录的评论(强调我的)。

C64具有65536 字节的RAM。按照约定,内存大小以kibiBytes为单位,数据传输速率以 千位为单位,大容量存储以“制造商认为现在的Bytes”为单位。硬盘在标签上使用T,G,M和k,Windows报告TiGiMiki的大小。还有那些1.44MB的软盘?它们既不是1.44MB也不是1.44MiB,它们是1.44千字节。那是1440kiB或1'474'560字节。– 第三


12
未来几年会出现混乱。在计算的早期,人们发现使用1024而不是1000的系数显然要容易得多。因此,几十年来,标准SI前缀“ kilo”一直(并且经常被用于非标准1024),在计算中已成为事实上的标准。除非有人仍然使用SI 1000。为了解决混乱问题,现在正式将“ kibi”定义为1024因子-但是为方便过渡而为时已晚。“ kilo”将在一段时间内定期使用/滥用1024个因子。
Steve314

如果他们没有选择那些听起来听起来很愚蠢的前缀,那将有助于采用。即使是首字母缩写词,也需要有人“精神上吸引”这个词。我简直永远不会使用“ kibibyte”等
。– tgm1024

Answers:


63
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二进制前缀(吉备/ MEBI /吉比等),因为他们在基地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)

5
+1提到一个字节中有8位可能会很有用。
paradroid

4
...并且不要忘记,半字节是四位(或半字节)!
Linker3000

4
可能还应注意,有时小写的“ b”有时会错误地用于缩写“ bytes”。我看到很多地方只使用缩写形式的“ bit”,例如MB表示兆字节,Mbit表示兆位,并且完全远离“ b”。
詹姆斯

4
前缀kg缩写为k,而不是
K。– garyjohn

1
@Redandwhite Nope,他们使用10来衡量其存储量,但是我们的计算机使用2来衡量。这说明了包装盒上打印的内容与计算机上显示的内容之间的差异。例如,500GB (box) = 465.7GiB (computer)就是他们如何得到您的)。
squircle

9

有一些简单易懂的基本术语:

* 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个手指,因此大多数人习惯并习惯使用十进制的十进制系统。二进制系统是base-2,大多数计算机都习惯使用base-2,因为它们具有两种电压状态。

十进制很明显,对于大多数人来说都很容易使用(它很容易乘以大脑)。每个前缀增加1000(原因完全不同)。

对于大多数非计算机人士而言,二进制系统要难得多,甚至程序员通常也无法在头脑中随意增加任意数量。然而,这是两个整数的简单问题。每个前缀增加1,024。一个“ K”是1,024,因为它是2的最接近于十进制“ k”的1,000的幂(在这一点上可能是正确的,但相差随着每个连续的前缀而迅速增加)。

具有相同前缀的位和字节的数字相同。

* 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)。


2
@endolith,不是真的。首先,确实有,或者至少在过去有一些使用二进制单位的驱动器制造商。其次,您错过了重点。如果他们愿意,他们可以将73,400,320放在驱动器上,的确是70M(i)B而不是66。他们使用70,000,000,因为使用它更便宜,现在仍称其为“ 70MB”。这是简单的偷工减料,许多制造商都这样做。看食物 而不是500G,他们将放入454G,因为它等于1LB。更糟糕的是,他们将使用450G而不是454G,并将丢失的4G归咎于四舍五入。这不是阴谋,而是削减成本。
Synetech 2014年

1
请提供一些使用二进制单位的硬盘驱动器制造商的示例。
endlith 2014年

1
@endolith,这不是历史记录网站。也许当我做一些春季大扫除并挖出一些旧驱动器时,我会贴一张照片或其他东西。否则,如果对您来说很重要,您可以去计算机历史博物馆或一家流行的计算机专卖店,找到一些旧的硬盘驱动器。如今,大多数制造商故意使用使事情听起来更大的标签。就像我说的那样,如果愿意的话,他们可以将它变成73,400,320字节来制作70MB的驱动器,但是为什么还要打扰他们何时可以便宜一些,并且在技术上仍称其为70MB?再次,这不是阴谋,而是常见的营销欺骗。
Synetech 2014年

2
我已经浏览了bitavers档案,发现的所有示例都是十进制的。驱动器制造商在某些时候为了欺骗客户而从二进制转换为十进制的神话是胡说八道。它们不是由市场部门编写的,而是由工程师使用工程师使用的标准单位编写的。将70,000,000字节的IBM 3340驱动器称为“ 70 MB”是合理而明智的。这就是“ mega-”的含义,这正是用户所期望的。在某些地方将其称为“ 66 MB”,在其他地方将其称为“ 68,359 KB”,就像Microsoft Windows一样是疯狂的。
endlith 2014年

1
@endolith,没有人说他们切换到十进制来欺骗,只是他们故意以这种方式销售它们,即使他们知道这种混乱,并且可以使驱动器有73,400,320字节,而不是70,000,000,这不是计算机中的整数。至于你提到它声明“永远”已经意味着,已经有在这里一个线程什么时候二进制单位投入使用,这是很久以前的事,肯定是之前电脑成为消费类产品。
Synetech

-4

有些答案不准确。

让我们先做一些笔记:

前缀“ kilo”表示1000。将“ kilo”添加到任何前缀表示该项目的1 000。“兆”或百万,“千兆”或十亿,“兆”或万亿等等,也是如此。

存在1024而不是简单地具有1000的原因是由于二进制算术的工作方式。顾名思义,二进制是一个以2为底的系统(它有2位数字:0、1)。与我们每天使用的以10为基数的base 10系统(0、1、2 ... 9)相比,它只能用两位数进行算术运算。

为了使用二进制算术得出数字1000(kg),必须执行浮点计算。这意味着每次操作必须携带一个二进制数字,直到达到1 000。在以10为基数的系统中,1 000 = 10 3(您总是在以10为基数的情况下提高10的幂),这是非常简单,快速的计算,使计算机在没有“余数”的情况下运行,但是在以2为基数的系统中,它是不可能将2升高(您总是将2升高至2的幂)到任何正整数才能得到1000。必须使用浮点运算或冗长的加法,并且执行所花的时间比整数计算2 10 = 1024。

您可能已经注意到2 10 = 1 024非常接近1 000,而1 024到1的有效数字是1 000(非常好的近似值),当CPU速度像老狗一样慢并且内存非常有限时,返回,这是一个相当不错的近似值,并且非常易于使用,更不用说执行起来很快了。

因此,术语“ kilo”,“ mega”,“ giga”等以不精确的数字(1,024、2,048、4,096等)为开头。它们从来都不是精确的数字,它们是以10为基数的二进制近似值。它们只是作为“技术”人员使用的行话而出现。

为了使事情变得更加复杂,JEDEC为半导体存储电路中使用的单元创建了自己的标准。让我们将一些JEDEC单位与SI(标准国际)单位进行比较:

Kb =千比特(JEDEC,1,024位。注意大写字母“ K”,小写字母“ b”)
kB =千比特(SI,1000位。注意小写字母“ k”和大写字母“ B”)

b =位(JEDEC,请注意小写字母“ b”)
b = ??? (SI并未定义“位”一词,因此其使用可能是任意的)

B =字节(JEDEC,8位。注意大写字母“ B”)
B = ???? (SI并未定义单词“ byte”,“ Bel”用于“ B”(如在DeciBel中一样))

KB =千字节(JEDEC,1,024字节。注意大写字母“ K”和“ B”)
kb =千字节(SI,1000字节。注意使用小写字母“ k”和小写字母“ B”)

关键是,不同的地方使用带有不同定义的不同前缀。对于应使用哪一个没有严格的规定,但要与使用的一致。

由于不赞成投票,请允许我澄清一下为什么不能通过将二进制数提高为任何正整数来使1 000变成二进制。

二进制系统:

+----------------------------------------------------------------------------------+
| 1 024ths | 512ths | 256ths | 128ths | 64ths | 32nds | 16ths | 8ths | 4s | 2s | 0 |
+-----------------------------------------------------------------------------------

请注意,在二进制系统中,列每次都会加倍。这与以10为基数的系统每次增加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。


3
我认为您在陈述数字1000需要浮点运算时是不正确的。您可以使用任何种类的编号系统来表示任何自然数。实际上,二进制等效值1000是1111101000
Doktoro Reichard 2014年

Doktoro,请记住我们是在二进制系统(或以2为基础)中工作,因此实际上您是不正确的人。以下是二进制(基数2)中2的前10次幂:2 ^ 0 =1。2 ^ 1 =2。2 ^ 3 =4。2 ^ 4 =8。2 ^ 5 =16。2 ^ 6 = 64 。2 ^ 7 = 128. 2 ^ 8 = 256. 2 ^ 9 = 512. 2 ^ 10 = 1024.请注意,答案是指数的,每次将指数增加1都会翻倍。可以将二进制数2(二进制数2 ...而不是基数10 2)提高为任何正整数,以使数值为1000。
user3005790 2014年

这并不能解释位和字节之间的区别。实际上有一个“硬快速规则” 1 Kb是一千个比特1KB是一千个字节。这是个很大的差异。8 Kb是1 KB。
Ramhound 2014年

3
尽管此语句是正确的,但是您仍然不需要执行任何类型的浮点运算。你理解的2的幂,所以你也可以理解,1111101000 = 2 ^ 9 + 2 ^ 8 + 2 ^ 7 + 2 ^ 6 + 2 ^ 5 + 2 ^ 3 = 1000
Doktoro Reichard

1
我不相信“它们从来都不是精确的数字,它们是基数为10的二进制近似值”,这是真的。我认为这仅仅是硬件被限制为只能存储1和0以及使用二进制寄存器进行硬件寻址的结果。两者均为基数2;我觉得完全不近似于以10为基数的计算。另外,我看不到您对计算的理解。这与计算机的输出将显示1024实际要显示1000或在内部将其显示1024时显示1000不同。您要指的是什么计算?
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.