问题描述
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例
输入: a = 1, b = 2
输出: 3
输入: a = -2, b = 3
输出: 1
思路
这尼玛不是强人所难?算加法不让用加号?
只能用位运算了。
异或运算是相异为一,相同为0,可以用来表示两个数相加无进位的情况。
与运算,两个1才能为1. 把与运算的结果左移一位就可以模拟出进位情况。
把无进位情况和进位情况继续异或、与处理, 直到无进位时,异或运算的结果即为所求。
AC代码
Java版
class Solution {
public int getSum(int a, int b) {
int res = 0;
while(true){
res = a^b;
if((a&b) == 0){
return res;
}
int jinwei = (a&b)<<1;
a = a^b;
b = jinwei;
}
}
}
有人说我写的不够优雅:
class Solution {
public int getSum(int a, int b) {
do{
int res = a^b;
int jinwei = (a&b)<<1;
a = res; b = jinwei;
}while(b != 0);
return a;
}
}