1 题目描述
1.1 英文描述
Given two integers a and b, return the sum of the two integers without using the operators + and -.
Example 1:
Input: a = 1, b = 2
Output: 3
Example 2:
Input: a = 2, b = 3
Output: 5
1.2 中文描述
给你两个整数,在不使用 +/- 这两个运算符的前提下,求它们的和。
2 解法
2.1 解法1 - 位运算
使用位运算和递归解决。
例如 2 + 3 = 5 ;其中5的二进制为0101。
运算过程如下:
- 2^3 等于 2+3 的无进位和 0001。
2^3等于
0010
^ 0011
-------
0001
- 我们发现 2&3 等于一个有规律的数,此数左移1位就是最终结果的进位数。
2&3等于:
0010
& 0011
--------
0010
- 2&3 的结果左移一位,得到最终结果的进位数。
0010 << 1 = 0100
- 0100再异或0001。
0100
^ 0001
-------
0101
- 循环操作,直到进位数为0。
2.2 代码
public static int getSum(int a,int b){
// b为进位,如果进位为零则和就是a.
if(b == 0) return a;
// 得到无进位和
int i1 = a ^ b;
// 得到进位数的过程数
int i2 = a & b;
// 得到最终进位数
int i3 = i2 << 1;
// 递归
return getSum(i1,i3);
}