A+B问题
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
一开始不会做,后来查了资料也不太看明白,还以为跟全加器有什么关系,后来弄懂后发现有一点关系但也不是很大,所以在这里写一个详解代码的:
public int aplusb(int a, int b) {
int s = a^b;
b = (a&b)<<1;
if(b != 0){
return aplusb(s,b);
} else {
return s;
}
}
使用位运算符去计算A+B实际只有两步,一步计算本位的和,一步计算进位的值,递归直到进位为0为止
设
int a = 5; int b = 7;
二进制如下:
101
111
s = 010;
b = 1010;
s为本位上的和,b为进位的值,由于二进制运算满2进1,即本位和的计算方式为该位上相同得0,异同得1,也即异或运算(a^b),进位得值计算方式则为该位上都为1(a&b)则进1(左移1),s + b即为原加法得和,按照此方法递归计算,直到进位为0时即可得到a+b和的二进制.