在数码产品中,最常见的名词就是“字节”了。不管是U盘容量、手机存储空间,还是网络带宽,下载速度,都会涉及所谓“字节”这个单位。但到底“字节”是一个什么东西呢?本章就为你说明这个问题。
数码产品与数学的关联非常深,而数学又是由数字组成的学问,所以我们现在数字开始说。在世界上,所有民族的数字“单位”几乎都是一样的,就是分为十个数字:一、二、三、四、五、六、七、八、九、十。许多人平时可能都不会去考虑,为何我们的数字会是十个,而不是七个,或者八个呢?事实上,如果人类和米老鼠一样是四个手指;或者人类是从鸟类进化来的“鸟人”,拥有四个指头,那么这个世界上的数字也许就只有从一到八了。因为原始人类社会中,由于每个人有十个手指,因此在使用数字的时候,最小的一组数字单位就正好用一个人的全部手指来充当。这样作为最小的一组数字,造成了数字的进位就以十为基础。所以十进制,仅仅是和使用数字的人,习惯使用的算术工具有关系而已;而数字本身,是可以用任意的“进制”的。
数字是可以用“任意进制”的,如果我们要“发明”一种:“数字”最少的计算方法,可以最少只用几个数字了?答案是“二”。对于计算机来说,它们天生都是“两趾”的:电压分高、低;磁极分南、北;电流有通、断,所以二进制是现在计算机的基础进制。也就是说,只要有 0 和 1 两个数字,就可以表达世界上一切数目。这个观点乍一听有点不可思议:既然我们可以只用两个数字就可以了,为何还要发明出另外八个数字呢?其实中国人的先哲中,有一位早就说明这个道理,他就是老子,他写道:道生一、一生二,二生三,三生万物。意思大概是阴阳两种事物,可以组合表达出万事万物。所以在八卦的图形上,阴阳表达为横线,中间有断开的是阴,没断开的是阳。
八卦则由三根这种代表阴阳的横线组成,不同的八种三根横线的组合,构成了八个不同的含义。这八个卦象,人们认为可以表达万事万物。在二进制来说,我们可以看成阴是 0,阳是 1,这样 3 位二进制数,刚好能容纳 0-7 一共 8 个数字。对于这样的二进制数,每条横线是一个数字单位,成为“位”,英文是 “bit”。比如表达十进制里面的 7,需要用三个二进制数表达:1,1,1 (阳阳阳),这里就是用了三个“位”的二进制数。如果你要表达更大的数目,就需要用更多的“位”。我们现在数码科技中使用的最小信息单位,也就是“位”。而“字节”(英文叫 “byte”),则是由八个“位”组合成的另外一个单位。
在第一章中,我们讲过,世界上所有的信息都能用数字来表达。我们的数字又是用最小数字的方法——二进制来构成的,所以当需要说明一串用来表达信息的数字,它们有多大的时候,我们可以说这串数字有多少个“位”。如 “1000100111111110” 这串二进制数(可能表达的是两个英文字母,也可能是小于 65535 的一个正整数),我们通过数一下他的长度,就可以说它有 16 “位”的长度。但是 16 位这么长的数,才表达两个字符或一个六万五以内整数,显得不太好理解,所以我们一般较少直接用“位”这个最小的数码单位,而是用另外一个更容易理解的单位——“字节”。
由于每八个“位”可表达一个拉丁文的字符(拉丁字母表才几十个字,汉字就不行了),所以我们就喜欢把八个“位”看成一个单位“字节”,说一段数字有多少个字节,就表示这段数字能表达多少个“字”(英文字)。尽管数字可表达的内容不止是文字,但是“字节”还是因为人们觉得“形象”而成为数字信息的单位。我们可以把每个“字节”看成一个小小的数字“盒子”,里面可以放八个 “0”、“1” 数字,计算机就可以这样以一个个的“数字盒子”来处理信息了。假如有一个盒子里面没装满,一般就把空位(高位)填上 0。
现在我们用的电脑、手机,几乎都是以字节为单位处理信息的,所以购买电脑、手机产品时、标签上的标记的单位,如 16Gbytes, 256G bytes 都用 bytes 字节做单位。但是通信带宽,还是习惯用 bit “位”位单位,如 100Mbit/S(网卡速度)、12Mbit/S(ADSL带宽)。有时候我们会奇怪:明明写着带宽是 12M /秒,为什么下载速度只有 1M /秒了?其实是因为两个计算的单位不一样,带宽的标记单位是“位”,12Mbit/ 秒其实等于 1.5Mbyte /秒,所以下载速度最多是一点几 M “字节”每秒。电脑上显示的基本都是 byte 字节为单位的嘛。早期的电视游戏卡带,号称 16M 大容量的游戏,却可以拷贝到 2 张3.5寸软盘(1.44M容量)中,也是这个道理,因为卡带的容量单位是“位”,而软盘的容量单位是“字节”,16Mbit 仅仅只有 2Mbyte 而已,2 张软盘绰绰有余了。
在各种各样的数码产品中,一般都会有两个指标:一是速度,一是容量。以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”,这个就是表示速度的指标(其实也不仅仅是速度这么简单,一个设备的制式涵盖的内容比较多,但 U 盘里影响比较大的是速度)。
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 计算时间为代价,这就是计算机世界的时空交换原则:你要节省空间,就要付出时间,反之亦然。程序中的所有优化,在相同硬件的情况下,一般都是按使用需求灵活平衡时间和空间而得到的结果。下一章,我们就会讨论可以让数字信息进行时空变化的方法——各种有用的算法。
评论区
共 1 条评论热门最新