https://www.jianshu.com/p/55166bfd31dd 感觉这道题的数学成分比较浓厚,参考这篇帖子。
(1)首先做加法,不考虑进位问题。相当于做异或操作。
(2)然后只考虑进位,不考虑加法问题。相当于做与运算。对第二步的结果左移一位。
重复上述的两个过程,直到进位为0。
while( num2!=0 ){
int sum = num1 ^ num2;//只考虑做加法
int carray = (num1 & num2) << 1;//考虑进位
num1 = sum;
num2 = carray;
}
return num1;