我们为什么逢十进一?大概是因为我们有十根手指。数字 10 并没有什么特别之处:任何数都可以用任何进制来写。莱布尼茨把这个想法推向极致,问道:最少需要几个数字,才能写出所有的数?

答案是两个:0 和 1。

每一位的值翻倍

用二进制写出的 0 到 32,出自莱布尼茨 1703 年发表于巴黎科学院论文集的《二进制算术的解释》中的表格。
用二进制写出的 0 到 32,出自莱布尼茨 1703 年发表于巴黎科学院论文集的《二进制算术的解释》中的表格。莱布尼茨(1703) · Wikimedia Commons · 公有领域

在十进制中,各位的值是 1、10、100、1000……,每个数字表示那个值用了多少次。在二进制中,各位的值是 1、2、4、8、16、32……,每个数字只能表示是(1)或否(0)。

$$10110_2=1\cdot16+0\cdot8+1\cdot4+1\cdot2+0\cdot1=22.$$

下标 $_2$ 提醒我们这个数是用二进制写的。用八位,也就是八个比特,各位的值从 1 到 128,能写出的最大数是

$$11111111_2=128+64+32+16+8+4+2+1=255.$$

算上零,共有 $2^8=256$ 个不同的数。这就是为什么计算机里有那么多东西的范围是 0 到 255。

打开或关闭八个比特

打开各位的权值,观察二进制写法和十进制和。左边补零可以保持八位长度,而不改变数值。

转换与加法

要把 13 写成二进制,就反复除以 2 并记下余数:

除法 商 余数
13 ÷ 2 6 1
6 ÷ 2 3 0
3 ÷ 2 1 1
1 ÷ 2 0 1

把余数从下往上读:$13=1101_2$。验证:$8+4+0+1=13$。

加法比十进制还简单,因为只有四种情况:$0+0=0$,$0+1=1$,$1+0=1$,$1+1=10_2$,即“写 0 进 1”。例如

$$101_2+11_2=1000_2,\qquad\text{即}\qquad5+3=8.$$

整张乘法表只占一行:$0\times0=0$,$0\times1=0$,$1\times1=1$。莱布尼茨为此着迷:乘法只不过是复制和移位。

埃及人的乘法

加倍的想法比莱布尼茨古老得多。在大约公元前 1550 年由抄写员阿赫摩斯抄录的莱因德纸草书中,埃及人只用加倍和相加来做乘法。要计算 $21\times37$,先列一张表,从 $1$ 和 $37$ 开始,每一行把两列都加倍:

1 的倍数 37 的倍数
1 37
2 74
4 148
8 296
16 592

在左列中选出加起来等于 21 的行:$16+4+1=21$。把右列中对应的行相加,$592+148+37=777$。所以 $21\times37=777$。

为什么行得通?选出这些行,就是把 21 写成二进制:$21=10101_2=16+4+1$。于是

$$21\times37=(16+4+1)\times37=592+148+37.$$

每个正整数都能以唯一的方式写成不同的 2 的幂之和,所以这个方法永远不会失败。埃及人在莱布尼茨之前三千年就在不知不觉中用二进制计算了。它的一个变体是把一个因数不断减半、另一个不断加倍,在欧洲被称为俄罗斯农夫乘法,与今天的处理器所做的事情很相似。

从无与一

莱布尼茨在 1679 年的手稿中研究了二进制,但迟迟没有发表。对他来说,二进制还有宗教含义:所有的数都由 1 和 0 产生,正如在他看来,世界是上帝从虚无中创造出来的。

中国的典籍

白晋于 1701 年寄给莱布尼茨的《易经》六十四卦图。图上的阿拉伯数字是莱布尼茨亲手写的:他把这些卦当作二进制数来编号。
白晋于 1701 年寄给莱布尼茨的《易经》六十四卦图。图上的阿拉伯数字是莱布尼茨亲手写的:他把这些卦当作二进制数来编号。白晋与莱布尼茨 · Wikimedia Commons · 公有领域

莱布尼茨与住在中国的耶稣会传教士白晋(Joachim Bouvet)通信。1701 年,白晋寄给他《易经》的 64 个卦。《易经》是一部大约有三千年历史的中国占卜典籍,每卦由六爻组成,爻分阳爻(连线)和阴爻(断线)。

莱布尼茨一眼就看出:把断线换成 0、连线换成 1,再按照传统上归于伏羲的排列顺序,这些卦正是用二进制写出的 0 到 63。他深为着迷,并把这一发现写进了他最终于 1703 年在巴黎科学院院刊上发表的论文《二进制算术阐释》。

从纸上到电脑里

两百多年里,二进制一直只是一种奇趣。1937 年,美国工程师克劳德·香农证明,用开关(开或关)组成的电路可以进行二进制运算,局面从此改变。今天,每台电脑、手机和计算器都把数字和文字存储为长长的 0 和 1 序列。

莱布尼茨没有发明计算机,也不是唯一想到用两个符号计数的人。但他系统地整理了二进制算术,展示了如何用它计算,并主张它揭示了数的某种深刻本质。

练习:把 19 写成二进制

$19=16+2+1$,所以 $19=10011_2$。用八位表示:$00010011_2$。

练习:111111₂ 等于多少?它和 2⁶ 有什么关系?

$32+16+8+4+2+1=63=2^6-1$。一般地,连续 $n$ 个 1 等于 $2^n-1$,正如十进制中 $999=10^3-1$。

资料来源: 莱布尼茨与二进制算术,美国数学协会 · MacTutor 传记。


莱布尼茨的全部主题 · ← 积分号 ∫:从求和到累积 · 莱布尼茨的机器:把算术变成运动 →

图片来源.