剑指offer:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
两个数不能用死则运算,那怎么办呢?首先肯定要想到可以用什么来模拟加法的过程,也就是说对数字进行更加底层操作--位运算
我们以4+9为例;
首先来看看十进制的加法如何进行:4+9=13(进而可以用二进制来模拟)
- 第一步,计算个位的值,不算进位,个位是3;
- 第二步,计算进位,得到10,如果这一步的进位是0(很重要的条件,意味着所有进位都结束,循环可以退出了),那么第一步就是得到最终的结果;
- 第三步,在进位不为0的情况下,重复上述两步,直到进位为0了,也就是不需要进位了,就可以结束了。
在不能使用加法的时候,那位运算可以模拟加法,(例如不要进位,简单的异或就可以模拟加法),这就是不用加法实现加法的原理基础,详细来看下面的图。