给出两个整数 a 和 b, 求他们的和
样例
样例 1:
输入: a = 1, b = 2
输出: 3
样例解释: 返回a+b的结果.
样例 2:
输入: a = -1, b = 1
输出: 0
样例解释: 返回a+b的结果.
挑战
显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用++等算数运算符)
说明
a和b都是 32位 整数么?
是的
我可以使用位运算符么?
当然可以
注意事项
你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b,计算他们的和并返回就行。
//2进制转换 先进行 异或转化 直到其中一个为0 位为止
public static int aplusb(int a, int b) {
if (a == 0) return b;
if (b == 0) return a;
int sum, i;
// 1001 0001 1000
// 1010 0000 0011
// 0011 0001 1011
// 3 19
//忽略进位 a^b 相同为0,不同为1 结果为 0011 3
i = a ^ b;
//a&b 类似,但规则为都是1则为1,否则为0
// 结果 1100 12 << 向左移位 为 0001 1000 结果是16
// 结果 0000 0000 0 << 向左移位 为 0000 0000 结果是0
sum = (a & b) << 1;
return aplusb(sum, i);
}