题371:类型:位运算
- 题目:不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
-
解题步骤
1、相加各位的值,不算进位,二进制每位相加就相当于做异或操作,可称为二进制的无进位加法;
2、计算进位值,相当于进行与操作,之后再向左移一位;
3、重复上述两步:进位值为0,跳出循环,即a为最终的求和结果。
class Solution {
public int getSum(int a, int b) {
// 进位不为0时一直循环,因为后面进位给b赋值了,所以这里是b
while(b != 0){
// 异或操作,相当于二进制的加操作
int temp = a ^ b; // 第二轮开始相当于temp ^ carry
// 计算进位值
int carry = (a & b) << 1;
// 将进位值给b
b = carry;
// 和给a
a = temp;
}
return a; // a是最后进位为0时的和,即最终结果
}
}
class Solution {
// 递归的方法,思路与上相同
public int getSum(int a, int b) {
if(a != 0){
int temp = a ^ b;
int carry = (a&b)<<1;
// 由形参顺序确定,a代表carry即进位,b代表temp即和
return getSum(carry,temp);
}
return b;
}
}