在数码产品中,最常见的名词就是“字节”了。不管是U盘容量、手机存储空间,还是网络带宽,下载速度,都会涉及所谓“字节”这个单位。但到底“字节”是一个什么东西呢?本章就为你说明这个问题
数码产品与数学的关联非常深,而数学又是由数字组成的学问,所以我们现在数字开始说。在世界上,所有民族的数字“单位”几乎都是一样的,就是分为十个数字:一、二、三、四、五、六、七、八、九、十。许多人平时可能都不会去考虑,为何我们的数字会是十个,而不是七个,或者八个呢?事实上,如果人类和米老鼠一样是四个手指;或者人类是从鸟类进化来的“鸟人”,拥有四个指头,那么这个世界上的数字也许就只有从一到八了。因为原始人类社会中,由于每个人有十个手指,因此在使用数字的时候,最小的一组数字单位就正好用一个人的全部手指来充当。这样作为最小的一组数字,造成了数字的进位就以十为基础。所以十进制,仅仅是和使用数字的人,习惯使用的算术工具有关系而已;而数字本身,是可以用任意的“进制”的。
[鸟类的脚趾只有四个]
数字是可以用“任意进制”的,如果我们要“发明”一种:“数字”最少的计算方法,可以最少只用几个数字了?答案是“二”。对于计算机来说,它们天生都是“两趾”的:电压分高、低;磁极分南、北;电流有通、断,所以二进制是现在计算机的基础进制。也就是说,只要有0和1两个数字,就可以表达世界上一切数目。这个观点乍一听有点不可思议:既然我们可以只用两个数字就可以了,为何还要发明出另外八个数字呢?其实中国人的先哲中,有一位早就说明这个道理,他就是老子,他写道:道生一、一生二,二生三,三生万物。意思大概是阴阳两种事物,可以组合表达出万事万物。所以在八卦的图形上,阴阳表达为横线,中间有断开的是阴,没断开的是阳。
八卦则由三根这种代表阴阳的横线组成,不同的八种三根横线的组合,构成了八个不同的含义。这八个卦象,人们认为可以表达万事万物。在二进制来说,我们可以看成阴是0,阳是1,这样3位二进制数,刚好能容纳0-7一共8个数字。对于这样的二进制数,每条横线是一个数字单位,成为“位”,英文是“bit”。比如表达十进制里面的7,需要用三个二进制数表达:1,1,1(阳阳阳),这里就是用了三个“位”的二进制数。如果你要表达更大的数目,就需要用更多的“位”。我们现在数码科技中使用的最小信息单位,也就是“位”。而“字节”(英文叫“byte”),则是由八个“位”组合成的另外一个单位。
[三位二进制数表示的8个序列的八卦]
在各种各样的数码产品中,一般都会有两个指标:一是速度,一是容量。以U盘为例,会写“256M”,这个指的是容量,意思是它可以存放256M个字节的这么长数字。其中M是一个数学单位,是英文的“百万”million的缩写,256M就是256x1,000,000个字节的数字。除了M,我们还常见到K,G,T等缩写,K是kilo,也就是“千”的意思,1000K=1M,G是1000个M,T是1000个G。现在好多硬盘的容量都有几个T,对比最早的40M容量的硬盘,大了几百万倍。说回U盘,我们常会以容量来表示他的特性,但是其实还有一个速度的指标。在U盘上我们细心点看标签,有些会写上“USB2.0”或“USB3.0”,这个就是表示速度的指标。
USB2.0标准,表示电脑可以以每秒30M个字节的速度,与U盘传输数据。标准越高,传输的速度越快,我们需要等待往U盘读写文件的哦时间就越短。硬盘、内存和U盘类似,都有一个容量的指标和速度的指标。另外一些硬件如网卡,指标主要就是速度,如100Mbit/S,意思就是网卡每秒能传输10x1,000,000个位(不是字节)。有趣的是,显示卡的主要指标往往是容量,因为卡上的显示内存越大,显示的速度就越快,现在带有几个G bytes的显卡很常见。最后说说CPU,一般我们认为CPU只有速度指标,如33MHz,就是每秒运算33x1,000,000次。其实CPU也有容量,我们现在有32位CPU,还有64位CPU,早期的CPU还有8位,16位的,这个“位”数就是指,每次预算能处理多长容量的数字。8位二进制最大就是0~255,如果程序要计算大于255的整数,就需要多次运算。早期16位游戏机里,常常用65535作为一个数的最大值,比如杀死最终BOSS获得经验值就是65535点,这样设计可以最好的利用其16位CPU;但是现在大部分32位、64位CPU的电脑里,计算65535还是655350都只需要一个计算周期,就没必要把数字限制到65535以内了。(当然以前的游戏缩小数字范围还有考虑减少卡带容量的因素)除了CPU的“位”数,CPU往往还带有二级缓存、三级缓存,这些缓存就是存放数据的临时空间,越大越有利于速度提高,所以CPU指标上也有这些缓存的容量指标。
刚刚我们提到了K\M\G\T这些缩写,但是这些字眼并不能给我们直观的认识——这些数据说代表的规模。我们可以先以文字来看,每1M字节的容量能存放1百万字的英文文章,这里的“字”是字母而非单词。对于中文来说,一般需要两个字节来表达一个汉字,所以1M Byte能存放五十万字的汉语文章。《水浒传》大概五十六万字,在电脑里,一张薄薄的软盘就可以放下了。如果你用光盘(CD-ROM),一般的光盘都有700M Bytes的容量,可以存放50万x700,大概三亿五千万字的文章,而《永乐大典》的字数也只有3.7亿字而已。《四库全书》号称世界上字数最多的书,大概有10亿个汉字,4张普通光盘,或者一张DVD基本就能装下。你看,1M是不是很“大”?
但是,如果你用1M空间存放图片,就会发现1M太小了,因为一张彩色照片,假如是1024X768个点组成(这个分辨率是老式显示器的),而每个点按256种颜色来绘制(256色几乎是卡通画的色彩才能这么少),那么一张照片就会占用1024x768x256个字节,大概2.4M,1M空间连一张质量很差的照片都放不下。所以,数据容量的大小不是绝对的,而是看说存放的内容来顶顶哦。事实上,1M空间是可以存放更多的内容的,办法就是针对存放的数据,使用不同的“数字魔法”——压缩算法,从而使同样的1M空间,可以存放五百万字的文章,或者十张彩色图片,又或者1分钟的音乐。节省空间的压缩,要付出CPU计算时间为代价,这就是计算机世界的时空交换原则:你要节省空间,就要付出时间,反之亦然。程序中的所有优化,在相同硬件的情况下,一般都是按使用需求灵活平衡时间和空间而得到的结果。下一章,我们就会讨论可以让数字信息进行时空变化的方法——各种有用的算法。
[3.5寸软盘]
[50万字的书]
[1024x768的图片2M容量]
感谢大家的阅读,如觉得此文对你有那么一丁点的作用,麻烦动动手指转发或分享至朋友圈。如有不同意见,欢迎后台留言探讨。