使用位运算计算两个整数的加减
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 }