1. 题⽬链接:371.两整数之和
2. 题⽬描述:
3. 解法(位运算):
算法思路:
◦ 异或^ 运算本质是「⽆进位加法」;
◦ 按位与& 操作能够得到「进位」;
◦ 然后⼀直循环进⾏,直到「进位」变成0 为⽌。
C++算法代码:
class Solution {
public:
int getSum(int a, int b)
{
int sum; //和
unsigned int jin; //进位,进位不需要符号位
while(b!=0)
{
//两数异或进行无进位加法
sum=(a^b);
//两数与运算右移1得出进位
jin=(unsigned int)(a&b)<<1;
//进位+无进位加法=两数之和
a=sum;
b=jin;
}
return a;
}
};
Java算法代码:
class Solution {
public int getSum(int a, int b) {
while (b != 0)
{
int x = a ^ b; // 先算出⽆进位相加的结果
int carry = (a & b) << 1; // 计算进位
a = x;
b = carry;
}
return a;
}
}