您的位置:首页 > 其它

Leetcode 371 求两个数的和

2018-08-03 14:31 103 查看

题意为不用+和-,求出a与b的和。
因此用位级运算。
我的思路是新建一个result遍历,将a和b按位求和,求和的方式是二进制加法专用符号:异或。
其中这句话carry=(tmpA&tmpB || tmpB&carry || tmpA&carry);的意思是:
如果tmpA、tmpB、carry中如果有两个以上为1,则进位置为1。

class Solution {
public:
int getSum(int a, int b) {
int i=0;
int result=0;
int work=1;
int carry=0;
while(i<32){
int tmpA=work&a;
int tmpB=work&b;
int tmpSum=(tmpA^tmpB)^carry;
result|=tmpSum;
carry=(tmpA&tmpB || tmpB&carry || tmpA&carry);
carry<<=(i+1);
work<<=1;
++i;
}
return result;
}
};
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: