题目思路
众所周知,lowbit操作可以求二进制数最低位的1所对应的值,如lowbit(100100) = 100,于是我们可以可以对num2求出其每一个1的位置,并判断num1在对应位置相加是否会发生进位。如果不是则直接相加,否则不断向前进位加一直至该位不发生进位
C++代码
class Solution {
public:
int lowbit(int x) {
return x & -x;
}
int add(int num1, int num2){
while(num2) {
int low = lowbit(num2);
num2 -= low;
if(num1 & low) {
while(num1 & low) {
num1 ^= low; //进位,num1该位置置为0
low <<= 1; //左移进位
}
}
num1 ^= low; //不发生进位,直接相加
}
return num1;
}
};