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

1、加法:

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

递归方式:

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

非递归方式:

 1         int _sum(int a, int b)
 2         {
 3             int s = a ^ b;
 4             int carry = (a & b) << 1;  // 如果两个数对应的位都是1,说明该位有一个进位
 5             while (carry != 0)
 6             {
 7                 a = s;
 8                 b = carry;
 9                 s = a ^ b;
10                 carry = (a & b) << 1;
11             }
12 
13             return s;
14         } 

 

posted @ 2015-09-10 12:41  kylinxue  阅读(370)  评论(0编辑  收藏  举报