当前位置 博文首页 > 中流击水,浪遏飞舟:位运算实现加法&&剑指 Offer 65.
a + b = (a ^ b) ^ ((a & b)) << 1;循环至进位数为0为止。
a | b | n(无进位和) | c(进位) |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
参考了大佬的题解:
面试题65. 不用加减乘除做加法(位运算,清晰图解)
class Solution {
public int add(int a, int b) {
while(b!=0){
int c=(a & b)<<1;
a ^= b;
b = c;
}
return a;
}
}
参考了力扣c++题解别人的处理方法。
class Solution {
public:
int add(int a, int b) {
while(b){
int c = a & b;
c = (unsigned int)c<<1; //有负数时不强转会溢出,故需要转换为无符号整数
a ^= b;
b = c;
}
return a;
}
};
参考了力扣评论区
class Solution {
public:
int add(int a, int b) {
return b==0?a:add(a^b,(unsigned int)(a&b)<<1);
}
};
cs