给出两个整数a和b, 求他们的和, 但不能使用 +
等数学运算符。
注意事项
你不需要从输入流读入数据,只需要根据aplusb
的两个参数a和b,计算他们的和并返回就行。
说明
a和b都是 32位
整数么?
- 是的
我可以使用位运算符么?
- 当然可以
样例
如果 a=1
并且 b=2
,返回3
int aplusb(int a, int b) {
// write your code here
if(a==0)return b;
if(b==0)return a;
int x1=a^b;
int x2=(a&b)<<1;
return aplusb(x1,x2);
}
首先要知道int类型在计算机中的存储方法,其中负值是存储的补码。通过异或操作和与,经过迭代可以实现加法的计算。
比如6+3:
6的二进制是0000 0110,3的二进制是0000 0011,那么计算如下:
第一次迭代:x1=0000 0101,x2*=0000 0010,x2=0000 0100(左移一位)
第二次迭代:x1=0000 0001,x2*=0000 0100,x2=0000 1000
第三次迭代:x1=0000 1001,x2*=0000 0000,x2=0000 0000,此时出现了0,就可以返回x1的值了,也就是计算结束
得到结果为9,计算结束。