不能使用加减法的话就只能使用位运算了。而位运算是针对于二进制的,所以应该从二进制的角度来理解这个事情。
首先 t=num1^num2
是求两个数字的二进制和,但是不算进位,然后使用 num2=(num1&num2)<<1
来计算 num1 和 num2 的进位。接着进入下一轮循环,将进位加到计算的和上。但是,加上进位以后可能还会产生进位,所以就需要不断循环,直到进位(num2)为 0,这时候,返回 num1 即可。
1 | class Solution { |
另外,还发现有人的答案是直接加入汇编代码,这个就很厉害了。
1 | int add(int a, int b) |