题目描述:
Calculate the sum of two integers a and b, but you are not allowed to use the operator +
and -
.
Example:
Given a = 1 and b = 2, return 3.
二进制加法规则
1+1=10
1+0=01
0+1=01
0+0=00
所以本位用异或运算,进位用与后再与下一位进行异或
AC代码如下:
class Solution {
public:
int getSum(int a, int b) {
int sum = 0;
int bit_num = sizeof(int) * 8;
int ad = 0;
for (int i = 0; i < bit_num; ++i){
if ((((1 << i) & a) & ((1 << i) & b)) != 0){
sum |= ad << i;
ad = 1;
}
else{
if (((1 << i) & a) != 0){
sum |= (1 ^ ad) << i;
ad = 1 & ad;
}
else if (((1 << i) &b) != 0){
sum |= (1 ^ ad) << i;
ad = 1 & ad;
}
else{
sum |= ad << i;
ad = 0;
}
}
}
return sum;
}
};