题目描述:
不使用运算符 +
和 -
,计算两整数 a
、b
之和。
思路:
既然不能使用运算符操作就要考虑到,位运算的加法。
加法有进位的时候和不进位的时候。
位运算既是0 和 1,
0+0=0;0+1=1;1+0=1;1+1=0(需要进位);
这不就是 异或操作嘛,相同为0,不同为1 例如:5+4
0101
+0100
=1001(9)
这时,我们发现异或只能判断到最高位以下,我们需要获取到进位的数的位置,当遇到两个1就进位,所以进行 “与” 运算,再左移1位就是进位。当遇到最高位是 0 时,就可以直接返回,(这时已经不用再进位了)
代码如下:
public int getSum(int a,int b){
while(b!=0){//直到进位是0 结束循环
int j = a ^ b;//异或 取非进位的值 (异或,相同位为0,不同位是1)
int s = (a & b) << 1;//先 与 获取进位后的一位数,再左移一位,相当于进位 (与,全真才真,有假则假)
a = j;
b = s;
}
return a;
}