1 · A + B 问题
描述
给出两个整数 aa 和 bb , 求他们的和并以整数(int)的形式返回。
你不需要从标准输入流读入数据,只需要根据aplusb
传入的两个参数 a 和 b,计算他们的和并返回就行。
-2^{31} \leq a, b \leq 2^{31} - 1−231≤a,b≤231−1
-2^{31} \leq a + b \leq 2^{31} - 1−231≤a+b≤231−1
样例
样例 1:
输入:
a = 1
b = 2
输出:
3
解释:
a + b = 1 + 2 = 3
样例 2:
输入:
a = -1
b = 1
输出:
0
解释:
a + b = -1 + 1 = 0
挑战
显然你可以直接返回 a + b,但是你是否可以挑战不这样做?(不使用+
等算数运算符)
异或运算: 不进位的加法
a^b就是a+b之后, 该进位的地方不进位的结果
考虑哪些地方需要进位, 就是a+b里都是1的地方
a&b就是a和b里都是1的那些位置, a&b<<1就是进位之后的结果
所以 :
a+b = (a^b)+(a&b<<1)
命令 a' = a^b, b'=(a&b)<<1
可以知道 这个过程是在模拟加法的运算过程, 进位不可能一直持续, 所以b最终会变成0
重复上面的操作就可以求得 a+b的值
public class Solution {
/**
* @param a: An integer
* @param b: An integer
* @return: The sum of a and b
*/
public int aplusb(int a, int b) {
return a+b;
}
}