我们先跳开数字电路内容,看看凡是讲计算机系统就绕不开的编码问题。
一、数制
数数时,我们往往是这样数的:“1, 2, 3, 4,...10, 11,...”(某些程序员们除外)。此时,就产生了一个哲学问题:为什么从“9”到“10”,数字多了一位?
一个广为人知也比较显而易见的原因是,人类有十根手指——当一个原始人用手指计数到十后,就需要用另外的东西(比如,一根树枝)来存储这个数字,因此,十进制即逢十进一;相似地,计算机也可以类比成一个有两个手指的生物。在之前档案室的例子中,我们已经看到了,对于任何一个开关,只有闭合和断开两种情况;因此,我们列出的每一种情况都可以转化为一组由0与1组合的数,这就是二进制数,即“逢二进一”,只需要0与1两种数字。所以,二进制的数表长这样:
对于计算机系统来说,二进制是最便于处理的,因为每一个数字都能和一条线路的高电平-低电平对应;而相对地,其它进制就会复杂不少,因为对输出与识别的精度要求提高了。不过据我了解,前苏联曾研制过一种叫做Сетунь的三进制计算机[1],实际上更加接近人类的逻辑,还能够提高运算效率(而另据参考,越接近e进制,效率就越高[2])。
(以上部分道听途说消息并非重点,请勿太过在意)
插播一则智力测试题:
你在和小刚玩扑克牌游戏,你的好朋友小明站在小刚身后,不停向你示意他的牌面;假设这副扑克牌不是普通的扑克牌,它的牌面最高有1000,而小明只能用十根手指的屈伸向你传递信息,那么,他如何才能最高效地表示数字?(单次能表示的数字最大)
但是,二进制有一个大问题,就是其每一位权值相对实在太低,很容易写出一长串数字,人脑难以处理。所以,在实际的逻辑设计中,我们往往还会用到16进制。它与二进制之间的转换比较直观,因此应用广泛:
注意到,因为懒惰的人类只定义了十个数字,所以当进制超过十时,就会需要从英语字母表“借”字母来表示数字。因此&#