b、B、KB、Kib、MB、MiB、GB、GiB、TB、TiB的区别

  • Post author:
  • Post category:其他



1024

这个数字,想必计算机行业从业人员应该不会陌生,甚至

10月24日

还被当做

程序员日

,如果你问一个程序员

1GB

等于多少

MB

,他大概率会不假思索回答:

1024

没错,对于稍微对计算机或者网络有了解的人,一般都认为

1024

是数据容量单位换算的倍数,例如

1GB = 1024MB



1MB = 1024KB



1KB = 1024B

…然而实际情况并非如此,里面有很多历史遗留问题。



bit/比特



binary digit

(二进制数位)的简称,中文音译读作

比特

,也可以叫

二进制位







位元

。指二进制中的一位,即

0



1

,是计算机内部数据储存的

最小单位

,也可缩写为

b

我们电脑中存储的各种文件,网络请求发送的数据包,本质上都是

0



1

的组合。 多个

bit

组合在一起就可以表示出不同的值

bit数量 可表示的值(二进制)
1 0、1 (2

1

)
2 00、01、10、11 (2

2

)
3 000、001、010、011、111、110、100、101 (2

3

)

N位bit可以组合表示出2

N

个不同的值。



byte/字节

中文译为

字节

,也可以叫

位组



位元组

。可缩写为B



字节的定义

是一种计算机领域中的

信息计量单位

,是针对

通信与数据存储

时的一个概念。当我们使用字节来描述某一段信息或数据时,我们并不用去考虑该段信息是属于何种数据类型。



byte一词的由来


byte

一词是

Werner Buchholz

于1956年6月在

IBM Stretch

计算机的早期设计阶段发明的,其英文

byte

来源于

Bite

(咬)一词,为了与

bit

做一区分,特地变‘i’为’y‘,成为我们今天所看到的

byte

,也可简写为大写

B

字节在诞生伊始,其目的仅是

表示用于编码单个字符所需要的比特(bit)数量

,并且在不同的应用中或使用不同的编码方式时,这一数量的大小也不尽相同。



1字节 = 8 比特 ?

当我们提起字节

(byte)

这一概念时,很多人都会下意识的想到

“一个字节等于八个比特”

这一公理。那么一个字节是否真的就等于八个比特呢?

历史上字节长度曾基于硬件为

1-48

比特不等,之后有一段时间则常使用

6比特



9比特

为一字节。

如果计算机完全以二进制工作,并且只对二进制数字进行了计算,那么就不会有字节。但如果要使用字符,我们就必须对这些符号进行编码。

在计算机出现早期,我们只需要使用计算机来处理整数运算,所以也只需要编码数字0-9十个字符,再加上加号’+‘与减号’-‘两个算数运算符,共计11种字符,此时我们只需4比特来进行编码就足够表示了。再后来我们又需要对字母进行处理,大小写字母加上数字,再加上例如逗号等标点符号,这时大概有了70多种字符,此时我们需要7比特来进行编码才能够表示完全。

而之所以最后确定

8bit



1Byte

,而不是

7bit

,可能是因为当时

IBM



360系统

使用

8位字符

,并且

byte

这个词被大量使用,且

8是2的幂次方

,比7更加适合

2进制

的计算机(Powers of 2 are magic!),所以最后大家就都接受了

1byte=8bit



Octet


Octet

定义为由八个比特组成的信息单位,中文译作

八位组

在今天的语境下,一般认为

1byte = 8bit

,但是上面说了,其实严格来说

1byte

并不等于

8bit

,所以

Octet

诞生了,用来表示八位字节,即

8bit


Octet

可简写为

o

,

1MB

可写为

1Mo(兆八位字节)



1KB

可写为

1Ko(千八位字节)

,不过这种写法一般在

byte

代表的

bit

数量不明确,可能出现歧义,需要明确

1byte = 8bit

时使用!



发展

随着科技和硬件的发展,内存变得越来越大,使用

byte

为单位来标识容量将会显得很大,比如

4096byte

,不利于阅读,于是人们想到了进位,就像

m

进位到

km

(1km=1000m)、

g

进位到

kg

(1kg=1000g),那么按理说

byte

也可以像其他国际制单位一样,以

10进制的1000

(10

3

)进位,即

1kB = 1000B

,那么为什么最后却变成以

2进制的1024

(2

10

)进位呢?



注意:严格来说

k



IS(国际单位制)

中代表千,即10

3

,书写应为小写,非正式场合也可以使用大写

K

,但在日常书写中,大写

K

更普遍被人们使用



1024进制的由来

那当初到底为什么出现了

1024

呢?其实这个问题和计算机内存的

寻址系统

有关。

所谓

寻址

,就是

寻找内存里面特定的地址

,就像按编号找到众多储物柜中的某一个。


CPU

里面有一个东西叫

“地址总线”

,这个东西用来

编码

要访问的

内存地址

,也就是储物柜的编号,例如

001



010

地址总线就是一堆电线,一个CPU有N根地址线,那么可以说这个CPU的地址总线的宽度为N。跟CPU里的其他元件一样,每一根都只能表示

0

或者

1

,也就是说,它也是用二进制来工作的。那么,地址总线有多少根,就决定了CPU能编码多少内存地址,这个范围就叫做CPU的寻址能力。

我们可以算一下,如果地址总线数量是1,能编码的内存地址就是

0

或者

1

、也就是2个,即2

1

,;地址总线数量是2,能编码的内存地址就是

00



01



10



11

,也就是4个,即2

2

;以此类推,地址总线数量是

N

,CPU的寻址能力就是2

N

既然CPU的寻址能力是按

2的幂

计算的,也就是说CPU只能编码2

N

个内存地址,那么内存的容量也就应该按

2的幂

来设计,这样才能跟CPU的寻址能力匹配。比如说,一块CPU的地址总线数量为10,它的寻址能力是2

10

次幂,也就是1024,即

0000000000



0000000001



0000000010



0000000011



1111111111

。如果设计内存的人按1000、2000、3000这样来设计内存容量,那永远也找不到合适的对不对?于是,内存容量就都被设计成了

2的幂

,以这里的10个总线为例,就是内存容量需要是1024的倍数。

上面说到,最早人们也是考虑像其他国际制单位一样,以

1000

进位,但是因为内存寻址的机制,最后选择了

2的幂

,即

1024

,而且那时候内存容量也小,以

MB

为单位,1024又比较接近1000,

1MB=1024KB

还是

1MB=1000KB

,误差并不是很大,所以就将1024看做近似1000使用。



混乱出现

你可能疑问,既然大家都是以二进制的

1024

为基准进行进位,哪儿来的误差?恰巧,问题就出现在这里。磁盘(软盘、硬盘)从一开始就没有类似

内存寻址

这个问题,因为:

第一

,磁盘的寻址和CPU的架构没有关系(磁盘访问由操作系统负责);

第二

,磁盘的基本存储单位是“扇区”,而不是单个字节,一个扇区的容量不是固定的。这就意味着,磁盘容量没必要非要按

2的幂

去凑整,而是可以怎么方便就怎么来。

IBM个人电脑上用的软盘为了迎合内存容量的二进制习惯,规定一个扇区的容量是

512字节

,那么两个扇区的容量就是

1024字节

,也就是

1kB

。因此,我们以前用的

360kB



720kB

的软盘,它们的

1kB

都代表

1024

字节,但后来出现的

高密度软盘

,容量写的是

1.44MB

,按

1MB=1024KB

换算应该是

1.44*1024=1474KB

,但实际上它的容量是720kB软盘的两倍,即

1440KB

,是按

1MB=1000KB

换算的,在这个节骨眼上,软盘厂商居然玩起了精分,让1KB=1024B,而

1MB=1000KB

,真是又一笔糊涂账

相比之下,硬盘厂商就专一多了。硬盘因为容量大,一开始就是

MB

尺度了。从20世纪70年代起,硬盘厂商在标示容量时就是按

1000

进位计算的,而这种标准沿用了几十年,到今天也依然是雷打不动。

这笔糊涂账让做操作系统的很是为难。毕竟,

内存容量和磁盘容量的算法不一样

,你让操作系统怎么显示才好呢?结果呢,当初几乎所有的操作系统都采用了内存的

二进制标准

,也就是按

1024

进位,那么磁盘容量也就跟着保持一致,也按照1024进位来计算,于是

系统显示

的容量就和

硬盘上标示

的容量有差距了。

还有更混乱的,在

windows

系统中,系统以

1024

对硬盘容量进行换算显示,而在

MAC OS



Linux

中系统又是以

1000

进行换算的,好嘛,真是乱上加乱!!!

如果分别以

1024



1000

进行换算,误差在

24/1000=2.4%

,在那个计算机还不发达的年代,似乎并不会有太大的问题,但是随着计算机的发展,硬盘容量越来越大,单位也由

MB

发展到

GB



TB

,



TB

这个量级,误差已经被放大到

9.95%

,这也是为什么我们买的标识为

500GB

硬盘在电脑上显示

小于500GB

的原因。

1956年IBM公司制造出世界上第一块硬盘350RAMAC,不是GB为单位,而是以MB为单位,大小为5MB。



改变


1KB

有时是

1000

字节,有时又是

1024

字节,这件事实在是太混乱了。而根据

国际单位(SI)

的规定,

k、M、G

等等这些前缀之间的倍率关系都是

1000

,那么用

1024

就明显和

SI是矛盾

的。于是,

国际电工委员会(IEC)

想了一个方案,说那这样好了,凡是需要表示

1024

进位的,就用另外一套写法:

Kibibyte

(giga binary byte的缩写)、

Mebibyte



Gibibyte

,可简写为

Ki、Mi、Gi



i



binary(二进制)

缩写,换算关系如下:

2进制 10进制
1Kibibyte = 1KiB = 1024B 1Kilobyte = 1KB = 1000B
1Mebibyte = 1Mib = 1024Kib 1Megabyte = 1MB = 1000KB
1Gibibyte = 1Gib = 1024Mib 1Gigabyte = 1GB = 1000MB
1Tebibyte = 1Tib = 1024Gib 1Terabyte = 1TB = 1000GB

后来,

IEC

的这个方案变成了

国际标准(ISO)

,所以严格来说,表示1024进位的时候一定要用IEC的这套新的前缀。比如硬盘若以

1000

进位,则应标注为

500BiB

。然而实际情况是,现在硬盘厂商是按

1000

换算且标识为

GB



TB

,是对的,而电脑系统却是以

1024

进行换算,但又显示的是

GB



TB

;内存条是按

1024

换算的,但是标识的是

GB

,标识单位错误

在这里插入图片描述

在这里插入图片描述


Mac OS

倒是以

1000

进位的,但是单位却是

GB

,害,真让人哭笑不得😂

在这里插入图片描述

不过好像

Linux

系统做的好一点

在这里插入图片描述

没办法,这都是历史遗留问题,大家都用习惯了,希望有一天可以统一标准!!!



其他

在通信行业,我们经常听到

千兆宽带

这个词,或者看到宣传页上写的

1000M宽带

,家里装了

500M

的宽带,但是下载游戏却只有每秒几十兆,这是怎么回事呢?

通信行业的基础是传输,而传输的基本单位是二进制码元,也就是bit,以通信中传输速率的单位是

bps(bit per second)

,也就是

bit/s

(每秒多少比特)。传输是的速率可能为任意整数,不一定为2的倍数,所以没有必要使用

K=1024

这种人类不擅长的二进制,而是使用

K=1000

的十进制形式,即 1B= 8b(这个是不变的),1KB = 1000B,1MB = 1000KB,1GB = 1000MB。

所以在描述带宽时,1000兆宽带的正确写法应该是

1000Mbps

或者

1Gbps

,这里的

b

为小写,代表

bit

,

M



G

代表

百万

(10

6

),所以

1000Mbps

带宽就代表理论上,每秒可传输1000/8 * 10

6

= 125 * 10

6

B =125 * 10

3

KB = 125MB的数据,也就是理论上网速最快为

125MB/s

,这里计算除以8其实就是将

b

换算为

B

,最后除1000换算成

KB



MB

在这里插入图片描述


一个字节(Byte)一定等于八个比特(Bit)吗



一字节为什么等于八比特?



KB和kb,傻傻分不清楚



电脑里的1kB到底是1000字节还是1024字节?



KB/KiB,MB/MiB,GB/GiB,它们的区别



版权声明:本文为weixin_42205101原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。