我们为什么逢十进一?大概是因为我们有十根手指。数字 10 并没有什么特别之处:任何数都可以用任何进制来写。莱布尼茨把这个想法推向极致,问道:最少需要几个数字,才能写出所有的数? 答案是两个:0 和 1。 每一位的值翻倍 用二进制写出的 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。 打开或关闭八个比特 128 64 32 16 8 4 2 1 打开各位的权值,观察二进制写法和十进制和。左边补零可以保持八位长度,而不改变数值。 请启用 JavaScript 以使用控件;例子和计算也在正文中。
1642 年,年轻的布莱兹·帕斯卡为了帮助当税务官的父亲,造了一台机器。这台“帕斯卡计算器”通过转动齿轮做加法和减法。但要做乘法,就得用手反复做很多次加法。 莱布尼茨在巴黎见到了帕斯卡计算器,想更进一步:造一台能自己做乘法和除法的机器。 乘法就是加法加移位 诀窍和学校里的竖式乘法一样。要算 $23\times14$,把 14 拆成 $4+10$: $$23\times14=23\times4+23\times10=92+230=322.$$乘以 4 就是把 23 加四次。乘以 10 只是把数左移一位。所以,一台加法做得好、又能移位的机器,就能做任何乘法。 把 23 × 14 拆成 23 × 4 和 23 × 10。示意图解释的是计算,并非历史上那台机器的复制品。本博客原创插图。 阶梯轮 莱布尼茨的计算机,带有阶梯圆柱,陈列于德累斯顿技术收藏馆。当时只造了两台,唯一留存下来的一台保存在汉诺威的戈特弗里德·威廉·莱布尼茨图书馆。Kolossos · Wikimedia Commons · CC BY-SA 3.0 难点在于:如何让机器把同一个数加好几次,而不需要操作者重新输入。莱布尼茨的解决方案是阶梯轮(德语 Staffelwalze):一个圆柱体上带有九个长短不一的齿,就像一道绕在上面的阶梯。 一个小齿轮在阶梯轮旁边滑动。如果它停在“3”的高度,阶梯轮每转一圈只有三个齿能碰到它,它就转动三格;如果停在“7”,就转七格。所以,调好小齿轮的位置,就等于在机器里存储了一个数字。每摇一次手柄,就再加一次这个数字。 计算 $23\times4$ 时,先设好 2 和 3,摇四次手柄。然后把机器的活动部分移一位,再摇一次,加上 $23\times10$。结果显示在表盘上:322。 进位的难题 在十进制齿轮上给 9 加 1,表盘要回到 0,同时下一个齿轮要前进一格:这就是“进位”。计算 $9999+1$ 时,四个齿轮必须依次、在恰当的时刻把进位传递下去。以 17 世纪零件的精度,这是最难的地方。