思路:
不用加减乘除,那只能用位运算。
1.两个数a,b相加,二进制如果不考虑进位 0+0 得 0 ;1+0 得 1;1+1 得 0 =》 其实就是异或^ 得到 tmp1
2.考虑进位,只有 1+1 的位置上会导致前一位(左边)进位加1 =》 用按位与 & 选出 都是两个数为1的位置,然后左移1位 得到进位 tmp2
把1,2 的结果tmp1与tmp2相加就是所求, 但是不能直接相加,又要使用步骤1,2
循环:
int add(int a, int b)
{
int tmp1, tmp2;
tmp1 = a ^ b;
tmp2 = a & b;
while (tmp2) {
tmp2 <<= 1;
a = tmp1;
b = tmp2;
tmp1 = a ^ b;
tmp2 = a & b;
}
return tmp1;
}
递归:
int add(int a, int b)
{
int tmp1, tmp2;
tmp1 = a ^ b;
tmp2 = a & b;
if(tmp2)
return add(tmp2<<1,tmp1);
else
return tmp1;
}
如求某数据n的9倍,n先左移3位再加n就可以了