Leetcode371. 两整数之和
思路:位运算
C++语言中有符号的整数发生越界之后会溢出,但是无符号的整数溢出后会自动取模,所以最多左移过程最多执行32次,常数时间内完成计算。
计算方法为:二进制中,加法是按照异或进行的,我们可以将进位保存下来,只有当两个数都是1的时候才会发生进位,所以每一次取&后再左移就保留了加法后的进位。
class Solution {
public:
int getSum(int a, int b) {
return b == 0 ? a : getSum(a ^ b, (a & (unsigned int)b) << 1);
}
};