整数加法

371. Sum of Two Integers

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example 1:

1
2
Input: a = 1, b = 2
Output: 3
使用++ 和 – 运算
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public int getSum(int a, int b) {
int label = 0;
if(b > 0){
for(int j = 0; j < b; j ++){
a ++ ;
}
return a;
} else {
for(int j = 0; j > b; j--){
a -- ;
}
return a;
}
}
使用位运算

原理:二进制加法器

x y sum carry
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

进位的计算放好方式为 x 与 y

和的计算方式为 x 异或 y

1
2
3
4
5
6
7
8
9
10
public int getSum(int a, int b) {
int sum = a;
int carry = b;
while(carry != 0){
int temp = sum;
sum = temp ^ carry;
carry = (temp & carry) << 1;
}
return sum;
}

回顾Java的位运算符

运算 运算符 Demo
<< 左移 5<<2 = 20 左移2位
>> 右移 5>>2 = 1 右移2位
>>> 无符号右移 -5>>>3 = 536870911
& 位与 5&3 = 1
| 位或 5 | 3 = 7
~ ~5 = 6
^ 异或 5^3 = 6

文章作者: 彭峰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭峰 !
 上一篇
2021-05-02 彭峰
下一篇 
2021-05-02 彭峰
  目录