想起来写这个题目主要是今天看某个旅游综艺节目,然后演员沈腾在出国之前咨询运营商客服国际漫游的事情,他们的对话是这样的:
沈腾: 你好,我想办那个国际漫游那个流量的那个
客服: 您要到哪个国家?
沈腾: 摩洛哥
客服: 哦,有单独扣费的,每兆10块
沈腾: 有是吧,有包天的吗,一天?
客服: 没有包天的
沈腾: 1兆10块啊?
客服: 每兆10块, 对
沈腾: 每兆,1个G是1兆,是吗,还是多少?
客服: 1兆就是1兆,1024KB是1兆,您说的1个G是1024兆。
沈腾: ...
看到上面那个对话,我也是有点醉了。不过对于非IT人士来说,我觉得很多人可能不知道1G等于1024兆是怎么来的,所以我今天就由这个点为引子说一说。
先从基础的讲起,在计算机的世界不得不提的一个概念就是二进制,记得有这么一个程序员用来辨别自己群体的笑话:
世界上有10种人,一种是看得懂二进制的,一种是看不懂二进制的。
这个笑话的点是在后面只说了两种,但是前面写的是10,大部分人看到10首先想到的是十进制,所以看到第一句的时候以为后面会有十种人,然后后面只描述了两种,懂的人看到结束之后就会往前面去找,原来笑话里面这个10是二进制,在二进制里面10其实就是2。
二进制在一个数位上只有0和1两种状态,然后如果数字大小超过2,就会往前进位。计算机科学采用二进制来计算和存储数据,是因为在硬件的世界里,存储和表达二进制是最直接的,因为在一个比特位上,只需两种状态就可以表达出来0和1,比如说一个电子晶体管,只有闭合和断开两种状态,磁盘存储介质上的磁粒子只有南极和北极两种极性
一般人如果没上过计算机课程或者计算机课程还给老师了的人最常接触二进制的可能就是通过电脑的或者手机的内存大小,硬盘大小,还有就是本文开头提到的网络流量,或者家里上网的带宽等等。
比如,现在的iPhone空间大小一般是32G,64G,128G。笔记本内存大小现在应该大部分都4G起步了吧,磁盘大小现在大部分都是512G,1T起步,Mac电脑笔记本现在磁盘空间一般都是128G或者256G了。
上面说为的G和T其实都是GB和TB的缩写,那到底B是什么呢,这里得给大家普及一下计算机里面的两个基础的数据计量单位:
- bit,比特,一个比特就是一个0或者1的状态
- byte,字节,一个字节是8个比特,关于1个byte为什么是8个字节的历史大家可以参考这里What is the history of why bytes are eight bits?,目前来说一般一个字节就是存储一个字符的,比如英文字符a
我们常说的磁盘内存空间,最基础的单位是Byte,但是说带宽速率的时候,说的是kbps(kilo bits per second),这里说的是bit。磁盘的容量以Byte为单位,我们接触的比较多的单位大部分是KB,MB,GB,他们的关系如下:
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
对于上面的数字关系大家可能还是不大能够具象化,我可以举一些例子来说明,大家可能就对于数量有一个大概的概念了。
- 目前来说存储一个英文字符一般是使用了1Byte,所以1KB大概就可以存储一个1024个英文字符的文章。
- 中文因为编码关系,一个字符存储的时候目前大部分都是占3个Byte,所以1KB一般就只能存三百多个中文字。
- 我们日常使用手机的时候,比较耗费流量的大部分都是图片和视频。手机APP上的一个一般的图片,经过压缩和优化一般都在100KB以内,也就是说沈腾在摩洛哥用手机流量看10张左右的图片可能就要10块钱。
- 现在APP上面一般一个15秒左右的视频一般都是2M-3M左右,如果是1分钟那一般大概就是10M左右了。所以我们1G的流量大概只够看100个左右的1分钟视频了。
说完了KB/MB/GB的大小问题,大家可能还有一个疑问没有弄明白,为什么1KB 是 1024 Byte 而不是 1000 Byte呢?
这个问题我觉得可能是这样的,在英文中进行数字大小表达的时候,大部分时候使用1000表示一个量级,比如在英语里面会有kilo,million,还有billion。但是在计算机里面,二进制是表示1000的时候是1111101000,这个看起来是很别扭的,不直观,而1024的二进制是这样的10000000000,所以会采用2的十次方1024这个近似的值来表示1000这个量级,这样相对来说差距感觉不是那么大。
后面经过查资料发现,对于1KB这个东西,还是有一些歧义的。在操作系统层面,所谓1KB是等于1024B的,比如我们经常看到的文件大小, 是按照1024来计量的。但是在硬件厂商那里所谓的1KB是1000B,不确定是否是硬件厂商基于节省成本的考虑还是什么,这也就导致了有一些硬盘买过来在操作系统里面显示的大小并没有商品说明上标明的那么大,这主要是因为操作系统采用的计量方式和硬件厂商的计量方式不一致导致的。
接下来还有另外一个问题,那就是带宽的问题了,大部分人对于带宽的认识可能都会有这个印象,就是我们的下载软件里面展示的速度,经常和我们的带宽不符合,导致很多小伙伴总是以为装了个假带宽。比如家里安装的带宽比如是20M,这时我们下载的速度最高就可能是2.5M/每秒。这里是为什么呢?
这里主要也是两种计量单位不一致导致的,在形容带宽的时候,我们使用的单位是bps(bit per second),所以20M是20Mbps,也就是20M比特每秒。而在下载软件里,因为是下载文件,而大家知道的文件的大小都是用Byte来形容的,所以下载软件展示下载速度的时候,是基于文件大小来进行计算的,比如一般是25KB/S,因为这样会更加直观。所以我们20Mbps的带宽,满负荷下载的时候,速度就是20Mbps / 8 = 2.5MB/s 了
好了,今天就说到这里,希望这些小知识能对大家有所帮助:)