题目链接
两整数之和
题目描述
注意点
- 不使用 运算符 + 和 - ,计算并返回两整数之和
- -1000 <= a, b <= 1000
解答思路
- 需要用位运算来模拟加法,关键是要找到相加的和以及进位1的部分。如果不考虑进位的话,相加可以运用异或,如0001^0111的结果是0110;计算后还要考虑末尾两个1相加后进位1的部分,本次进位的部分可以根据a & b进行计算,其影响的是更上一位,所以还需要左移即(a & b) << 1,随后还要继续根据进位1的部分继续计算其结果,以此类推…
- 计算主要分为三个步骤:一是计算a和b的进位影响位置c,即(a & b) << 1;二是计算a和b不受进位影响的和,即a ^ b,并赋值给a;三是将进位影响位置c赋值给b,方便循环计算结果
代码
class Solution {
public int getSum(int a, int b) {
while (b != 0) {
// 存储进位影响位置
int c = (a & b) << 1;
// 计算忽略进位时a与b的和
a = a ^ b;
b = c;
}
return a;
}
}
关键点
- 掌握位运算