LeetCode-371. 两整数之和
不使用运算符 +
和 -
,计算两整数 a
、b
之和。
示例 1:
输入: a = 1, b = 2 输出: 3
示例 2:
输入: a = -2, b = 3 输出: 1
分析:看见题目知道用位运算解决,但是具体操作并不熟悉,所以
含义 | Pascal语言 | C语言 | C#语言 | Java |
---|---|---|---|---|
按位与 | a and b | a & b | a & b | a & b |
按位或 | a or b | a | b | a | b | a | b |
按位异或 | a xor b | a ^ b | a ^ b | a ^ b |
按位取反 | not a | ~a | ~a | ~a |
左移 | a shl b | a << b | a << b | a << b |
带符号右移 | a shr b | a >> b | a >> b | a >> b |
无符号右移 | a>>> b |
解题思路:低位两个1相加需要进位,进位之后需要左移一位,计算到没有进位就结束了
代码:
1 class Solution { 2 public: 3 int getSum(int a, int b) { 4 if(b == 0) return a; 5 int sum = a ^ b; 6 int carry = (a & b) << 1; 7 return getSum(sum, carry); 8 } 9 };