问题描述:Calculate the sum of two integers a and b, but you are not allowed to use the operator +
and -
.
问题思路:加法可以拆解成两个步骤:不考虑进位,各位相加;各位计算进位与否。这个过程对十进制和二进制都满足。其中异或运算(半加运算)可实现第一步。第二步是与运算。
1. a和b只有做a^b和(a&b)<<1就是两步的结果
2. 然后对新的两个数相加,也就是重复第一步
3. 直到没有进位,也就是(a&b)<<1==0
int getSum(int a, int b) {
int c = 0;
do {
c = a^b;
b = (a&b)<<1;
a = c;
} while(b);
return c;
}