您的位置:首页 > 其它

使用位运算计算两个整数的加减

2015-09-10 12:41 260 查看
1、加法:

两个整数的加法可以转换成:两个整数各自2进制位的纯加法和s【不包括进位】,记录两个整数在哪一位上有进位的变量carry。然后结果就转化为了 s+carry。接着,再使用相同的方式,直到carry为0为止。此时,相当于被加数为0,和就是加数本身。

递归方式:

// 使用位运算计算两个数的加法
int sum(int a, int b)
{
if (b == 0) return a;
int s = a ^ b;
int carry = (a & b) << 1;  // 如果两个数对应的位都是1,说明该位有一个进位
// 此时的和即为 sum + carry
return sum(s, carry);
}


非递归方式:

int _sum(int a, int b)
{
int s = a ^ b;
int carry = (a & b) << 1;  // 如果两个数对应的位都是1,说明该位有一个进位
while (carry != 0)
{
a = s;
b = carry;
s = a ^ b;
carry = (a & b) << 1;
}

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