每个人的Python:数学、算法和游戏编程训练营
上QQ阅读APP看书,第一时间看更新

4.2.2 编程实现——不用加减乘除运算符做加法

加减乘除四则运算是编程语言最基础的功能,Python中也有对应的运算符来支持这些运算。我们开动一下脑筋,假设不使用“+”“‒”“*”“/”这4个运算符,能够对两个数进行相加运算吗?尝试编写一个函数,输入两个数值(正整数),在不使用四则运算符的前提下将其相加的结果返回。给你一点小提示,可以从计算机二进制的原理入手进行思考。

要解决本题其实并不难,重要的是我们要了解二进制运算的一个有趣的特点。

对两个正整数进行异或运算,得到的结果实际上就是两数相加后所有未进位的位,例如二进制数1101与二进制数1000进行异或,将得到结果0101。

同样,对两个数进行与运算得到的结果实际上是需要进位的位,例如二进制数1101与二进制数1000进行按位与运算,将得到结果1000,这个结果实际上记录了在实际相加运算时所有需要向左进1的位,我们只需要统一做一次左移运算,即可得到进位后的结果。

通过上面两次运算后,我们将重新得到两个数,这两个数相加的结果与最初输入的两个数相加的结果将是一样的。重复上面的两种操作,直到不再有进位的位出现,则表明我们得到了最终的运算结果。示例代码如下:

如以上代码所示,其中f记录没有进位的位,n记录进位的位,每次计算后,都将a和b重新赋值,直到不再有进位,则得到最终结果。

需要注意,从难度上讲,本题并不困难,但是要解决本题,需要对二进制的运算原理有着深入的理解。对于本题,你自己解出来了吗?