500G 硬盘为何缺斤少两?百兆宽带的下载速度为何只有10 兆?8G 内存只能使用 4个G的背后又隐藏着什么?是人性的扭曲还是道德的沦丧?敬请关注本期《走近技术》10.24 特别节目:1024 引发的迷案
不过在讲有关 1024 的故事之前,我们先来聊一聊“二进制”的起源。
通常我们用的都是“十进制”,也就是每一位有10个数,到10的时候会升位。所以二进制就是每一位只有2个数(0和1),到2就会升位,原本的
1, 2, 3, 4, 5……
就变成:
1, 10, 11, 100, 101……
现代的二进制记数系统是由莱布尼茨于1679年设计的。有种说法:莱布尼茨是解读了易经中的卦象,并从中获得了部分灵感。
![watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfNjI=,g_se,x_0,y_0,t_100](https://i-blog.csdnimg.cn/blog_migrate/a6a1beb1ea4a4577b383d1dcfa186f02.jpeg)
不管这个说法是否靠谱,但八卦确实可以用一种二进制的思想来理解:只用阳爻(连着)和阴爻(断开)两种状态,三个位,就表示出8种不同的状态。
之后,乔治·布尔(就是 Python 中bool值的那个布尔)设计了一种现在叫做布尔代数的逻辑系统。而香农,则用一篇论文讲述了怎么用继电器和开关实现二进制算术运算,理论和实际就这样被联系了起来。再后来,一堆牛人在此基础上捣鼓出计算机,二进制这一种计数方法也随着计算机的发明而大放异彩。
那么,二进制和 1024 有什么关系呢?
计算机中最小的二进制单位称作比特(Bit,简写为 b),只有两个值:0和1,它也可以用来代表一个晶体管的通断,或者某根导线上电压的有无。
而8个比特就组成了一个字节(Byte,简写为 B),一个比特有 0 或者 1 这两种可能,所以一个字节(8 个比特)就包括了2^8 = 256(2的8次方)种组合。
不知道大家有没有遇到过网速特别慢的情况,网速可能只有几百B,这就是说每秒钟传输的数据只有几百字节。
那如果网速很快,每秒钟能够传输的字节很多,该怎么表示呢?在后面加很多0肯定不太方便。按照国际单位制 (SI) 的方法,逢千进位,1个千字节表示为1000字节,单位符号记为KB,即:1 KB = 1 000 B。
依次类推:
1 MB = 1 000 KB = 1 000^2 B
1 GB = 1 000 MB = 1 000^2 KB = 1000^3 B
但是别忘了,我们前面说了,计算机是二进制的啊,所以还是以一个2的次方数来定义“千”更加方便点。为什么这么说?
如果我们在计算机中表示 1000,就是1111101000,按通常的千进位就是1 KB = 1111101000 B,这看上去好像不太合适。后来大家发现,1024 这个数很好,它是2的次方数(2^10),同时 1024 和 1000 又很接近,误差只有 2.4%。如果改用 1024 来代替 1000,1 KB = 10000000000 B,这下看起来就舒服多了!而且在底层计算时也会减少操作次数。
所以,用 1024 来代替 1000 进位,即 1 KB = 1024 B。这样既方便又实用。
像早期的16位计算机,它的地址线是16位,也就是说它的CPU可以处理16位的二进制数。所以它可表示的内存范围就是0000000000000000~1111111111111111,也就是0~65535。
![watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfNjI=,g_se,x_0,y_0,t_100](https://i-blog.csdnimg.cn/blog_migrate/29b8e289b32a118dd423a36cfe031561.jpeg)
至于为什么有的系统只支持最大 4G 内存呢?就是因为这些系统是32位的操作系统,内存寻址的最大范围就是2的32次方,即4 * 1024^3也就是4G,内存中大于 4G 的部分没法被 CPU 访问到,即使你插上8G的内存条也没用。
到了现在,我们有了两种进位方式:1000 和 1024。为了防止混用 ,国际电工委员会(IEC)还提出了一套标准,规定在计算机领域使用 1024 进位的时候,不要写成 1 KB = 1024 B,而应该写成:
1 KiB = 1 024 B
1 MiB = 1 024 KiB
1 GiB = 1 024 MiB
然而并没有什么用,大家现在基本还是我行我素。
讲了这么多,可是这和500G 的硬盘缺斤少两有什么关系呢?
其实,这都是因为在硬盘销售时和计算机读取时用的换算单位不同所导致的。
在销售硬盘时,都是采用 1 000 来进位的,这样,一个 500G 的硬盘就是:500 G = 500 * 1 000 * 1 000 * 1 000 Byte = 500 * 1 000^3 Byte
但是,对于计算机来说:500 * 1 000^3 Byte = 500 * 1 000^3 / 1024^3 G = 465 G
这样看来,越大的硬盘会损失的越多。你新买的500G硬盘存不下你收集的500G电影。 ♂️
最后,我们再来看看另一个未解之谜,为什么百兆宽带的下载速度最多只有10 兆左右?
这个虽不是因为二进制,但也和单位有关:
在网络通信,传输数据的时候,需要将要传输的内容转换为电信号,再通过电缆传输出去,实际通过电缆的是高低电压的电流。也可以将传输内容转换为光信号,那么,传输介质就变成了光纤,通过光纤的是或明或暗的(不同相位的)光线。
仔细想想,这其实就是传输了一个个的比特啊,所以,数据通信中是以 比特 作为单位的,也就是通常说的小b。而我们在使用电脑时看到的速度都是以字节作为单位,也就是大B。运营商宣传的百兆宽带,其实是百兆 bit/s,1 Byte = 8 bit,换算一下就发现,100 M Bit/s = 12.5 M Byte/s。所以百兆宽带的理论最大网速就是12.5 M/s。考虑传输过程中的损耗等原因,实际网速也不可能达到理论值,所以实际网速肯定是小于 12.5 M/s 的。
至于为什么硬盘制造商要用 1000 而不是 1024,电信运营商要用 bit 而不用 Byte,那我就不知道他们了。难道就是因为卖的时候看起来更多一些?
好了,今天的 1024 特别节目到这里就结束了,现在你可以拿着这些问题去考考你的小伙伴了。
最后给大家讲个笑话:
齐大圣:Crossin,最近我手头有点紧,能借1000块救个急吗?
Crossin:可以啊,给你凑个整吧!
(收到转账 1024 元)
----
更多实用和有趣的内容,欢迎搜索并关注:Crossin的编程教室
一起学,走得远!