描述
给出两个整数 a 和 bb , 求他们的和。
样例
样例 1:
输入: a = 1, b = 2
输出: 3
样例解释: 返回a+b的结果.
样例 2:
输入: a = -1, b = 1
输出: 0
样例解释: 返回a+b的结果.
挑战
显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用+++等算数运算符)
代码部分
public int aplusb(int a, int b) {
// write your code here
// write your code here
int c,d;
if(b==0){
return a;
}
else{
c=(a^b);//不进位加法
d=(a&b)<<1;//“&”来找到需要进位的位并左移一位
return aplusb(c,d);
}
}
补充说明
异或运算有个别名叫做不进位加法,A ^ B得到的值就是各位上除去后面进上来的进位后它该有的值,那么问题就转化成它的哪些位是有进位的。而只有1 & 1才会等于1,因此我们只需做一次与运算就可以找到有进位的位置,但是进位是要向前进一位的,所以我们再做一次左移运算。