Calculate the sum of two integers a and b, but you are not allowed to use the operator +
and -
.
Example:
Given a = 1 and b = 2, return 3.
------------------------------------------------------------------------------------------------------------------
题意是不适用“+”或“—”号完成加法运算。
由于加减运算在计算机中都是用二进制补码进行运算,所以,这道题需要使用位运算完成。然后问题就是进位如何表示?
首先看本道题的代码:
public class Solution {
public int getSum(int a, int b) {
while (b != 0) {
int carry = a & b;
a = a ^ b;
b = carry << 1;
}
return a;
}
}
代码中进位用第四行和第六行表示。首先a&b得到进位的位置,然后carry<<1左移一位完成进位。
a^b计算得到不需要进位的值,循环进位b,直到进位为0。
详细的计算过程示例如下:
参考博客链接:http://www.cnblogs.com/dyzhao-blog/p/5662891.html