3.2 用二进制做加法其实更简单

尽管讨论十进制加法对我们来说显得很轻松,但我们不应该停留在这里,毕竟它不是这一章的重点。现在,让我们接着讨论另外一个更重要的话题,它关系着我们的加法机是不是能顺利地造出来。

也许你已经知道(或者想到),二进制数也可以像十进制数那样进行各种数学运算,比如:

11101 + 110 =?

尽管已经学习过二进制,但上面这道题对我们来说还是像天书。不要紧,我来给大家翻译一下。因为11101和110分别等于十进制数的29与6,所以这道题其实算的是

29 + 6 =?

当然了,结果应当是100011,即十进制数35。所以,在数学公理面前,不管你说的是外国话,还是中国话,也不管你用的是什么数制,都不重要。

我知道你这会儿在想什么。你一定觉得奇怪:“我就纳闷儿了,两个二进制数相加,就得到了另外一个二进制数,这是怎么得到的呢?”

我们知道,在做十进制加法的过程中有两点是比较重要的:一是必须掌握加法口诀;二是需要考虑进位。很不巧,如果要做二进制加法,这两点同样很重要,简直是避不开。

加法口诀的作用是让你念念有词地得出结果。前面已经说过,十进制加法有一大堆口诀,之所以有这么多,是因为十进制有0~9这十个基本数字,这百十来条口诀就是用这十个基本数字翻来覆去组合而成的。

相比之下,二进制加法的口诀会比较简捷,因为它只有两个基本数字:0和1。所以,口诀的第一句是

0加0等于0

搞科学技术的,都要费力劳神,兢兢业业才能出点成果,就像是养育孩子。所以,要是有些学科跟养孩子能扯上关系,也就不那么奇怪了。考虑到这些,上面那句口诀的意思可以理解为

爹不揍,妈也不揍,孩子不痛(上午不痛,下午不痛,一直不痛)

父母打孩子,生活中时有所见。要不要打孩子,该不该打孩子,学术界的意见还不是很统一。有人认为父母要和孩子做朋友,以说服教育为主;也有人觉得6岁左右适当给点教训,有助于孩子成长。我们不是教育家,也不知道哪种观点更有道理。但显而易见的是,爹揍妈不揍,或者爹不揍妈揍,孩子都会痛的:

0加1等于1;

1加0等于1

不要被表面现象所迷惑,尽管十进制里也有0和1这两个数字,但前面这三条不是十进制加法,尽管站在十进制的角度来看它们毫无疑问也是正确的。

0和1可以有4种相加的组合形式,前面已经有了3种,还剩下最后一种,即“1”和“1”相加。现在,二进制加法和十进制加法的相似性已经到此结束,在二进制里,1+1=10,但加法口诀的规则是必须表示成进位的形式:

1加1等于0,进1

没啥说的,因为孩子做了天大的错事——比如把父母的结婚纪念照拿去做风筝,父母都气昏了头,于是一齐动手开打。结果打得太狠,孩子当时不觉得痛(木了),到了下午或者第二天,就开始痛了。

打孩子是不对的,上面这4条,就是二进制加法口诀的全部内容,我们不妨称之为“第一亲子定律”,让那些将来要做父母的人不但学了计算机技术,还时刻保持警醒,懂得要爱护自己的孩子。

学习了二进制加法的口诀之后,现在,让我们实际做一下,操练操练。这回来个简单的,能说明问题即可,比如110 + 11。以十进制的眼光来看,它实际上计算的是6 + 3。

如图3.2所示,和十进制加法一样,两个要加起来的数先是右对齐,然后从最右边的列开始计算。

图3.2 二进制加法示意图

先是“0”加上“1”,这正好对应于口诀“0加1等于1”,所以这一列的和是“1”;

接着,是两个“1”相加,依据口诀“1加1等于0,进1”,所以这一列的结果是“0”,同时向左边产生一个进位“1”;

继续往左边来,这一列是个光杆司令,但不能直接拽下来,因为底下还趴着一个进位“1”。依据“1加1等于0,进1”,这一列的结果又是“0”,而且也向左边扔出个进位。但是,左边已经什么都没有了,这才是名副其实的光杆司令,那就直接把它拽下来吧。所以,最终的结果就是1001。

至此,我们已经得出110+11=1001。这个结果是不是正确呢?好办,翻到第2章,你就会发现,二进制数1001确实等于十进制数9。如果你还不放心的话,可以多找一些二进制数来试试。