给你两个整数 a
和 b
,不使用 运算符 +
和 -
,计算并返回两整数之和。
示例 1:
输入:a = 1, b = 2 输出:3
示例 2:
输入:a = 2, b = 3 输出:5
提示:
-1000 <= a, b <= 1000
Related Topics
/**
* 与&:0&0=0 0&1=0 1&0=0 1&1=1
* 异或^:0^0=0 0^1=1 1^0=1 1^1=0
*
* 异或计算,运行后能表示当前位置相加之后的值是0还是1
* 01010 ^
* 11011
* 10001 结果1
*
* 与运算能表示,当前位运算之后是否需要进位
* 01010 &
* 11011
* 01010 结果2
* 所以需要把结果2再左移一位再次和结果1做异或运算,如此循环直到结果2为0
* 10001
* 10100
* 00101 ^结果
* 10000 &结果
* 继续处理
* 000101
* 100000
* 100101 ^结果
* 000000 &结果
* 结束
*/
class Solution {
public int getSum(int a, int b) {
int c = (a & b) << 1;
a = a ^ b;
int tmp = 0;
while (c != 0){
tmp = a;
a = a ^ c;
c = (tmp & c) << 1;
}
return a;
}
}
发表评论