“逢二进一”的算术

人类对于司空见惯的东西,总是觉得是天经地义的。孩子们从小就学习“逢二进一”的算术,随着年龄的增长,和这种数制打交道越来越多。很少有人怀疑并追究这种数制的由来。其实,十进位制源于人类的 10 个手指。在远古时代,人们是用扳动手指来计数的,2000 年前古罗马的数字和中国的记数符号,都是由此而起源的。

可以想象,假如在数亿年的进化过程中,人类生就的是光秃秃的两个拳头,那么他们所用的数制大约会是“逢二进一”。

桌上放着一打铅笔,我们会准确无误地写出铅笔的数目为“12”。倘若有谁写成“1100”,大家都会认为是荒谬的。然而,这却正是使用“二进位制”的记号。为了今后不至于引起混乱,我们用下标(2)表示进位制下的数。例如;

1100(2)=1×23+1×22+0×21+0=8+4=12;

10101(2)=1×24+0×23+1×22+0×21+1

=16=4+1=21

上面几式的右端,实际表明了怎样把二进制数化为常用的十进制数。至于怎样把十进制数化为二进制数,下面提供的是一种有效的途径。比如,要把 71 写成二进制数。如下式,我们将 71 除以 2,余数写在右边。如果除尽, 则写 0。

将商再除以 2,重复上述过程,直到商等于 1 为止。这个 1 也写到右边

余数那列的最下面,再从下到上写成一行数,它便是 71 的二进制数的表示法:

71=1000lll2

二进制的最大优点是,每个数位都只有 0 与互两种状态,这使得我们可以通过简单的方法,例如白与黑、虚与实、负与正、点与划、小与大、暗与亮等等加以表示。下表所列的是 71 用二进制的几种表示方法。当然,二进制也有不足,正如大家看到的那样,同一个数目在二进制中要比在十进制中位

数多得多。也有些问题在古进制中显得很复杂,但在二进制中却十分简单。下面一则古老而有趣的传说,颇为生动地体现了这一点:

印度的舍罕王打算重赏国际象棋的发明者宰相西萨·班·达依尔。这位聪明的大臣向国王请求说:“陛下我什么也不要,只请您在第一个小格内放一粒米;在第二个小格内放两粒;第三格放四粒;照这样下去每一小格内都比前一小格加一倍。把棋盘上 64 格的米粒都恩赐给我!”

国王慷慨答应了西萨·班·达依尔的要求。他觉得宰相的请示未免过于寒酸。

可是国王很快发现自己的诺言是无法实现的,因为他需要付出的米粒数是:

2 3 4 63

264-1 64

1+2+2

+2 +2 + +2

= 2 − 1 =2 -1

=18446744073709551615

这是一个长达 20 位的天文数字!

最后西萨·班会因为国王无法忍受没完没了的债务而丢掉脑袋。

不过,我们要说的是:如果使用二进制,西萨·班所要求的赏赐,只是一个形式简单的数字。

读者想必对小学里背诵的“九九乘法表”记忆犹新。那是一件十分辛苦而费时的事。然而对于二进制数来说,各种运算规则全都出奇地简单。任何人在半分钟之内,都能把它背得滚瓜烂熟:

运算规则可以归纳为八个字:“格式照旧,逢二进一。”利用这一规则, 可以很容易地实现二进制数的四则运算。下一位的 1+l。

读者可以自行设计更多的练习。目前,这种只有“0”、“1”“两个数字的二进制系统,已成为计算机最为理想的数字语言。