您的位置:首页 > 其它

不用加减乘除实现加法

2016-04-17 12:51 513 查看
思路:

不用加减乘除,那只能用位运算。

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就可以了


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: