剑指offer65. 不用加减乘除做加法

写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。

题解:使用位运算

  • 计算不进位的和 sum = a ^ b;
  • 计算进位carry = a & b << 1;
  • 重复上两步a = sum; b = carry;
class Solution {
public:
    int add(int a, int b) {
        int sum;
        while (b != 0) {
            sum = a ^ b;
            b = ((unsigned int)(a & b) << 1);
            a = sum;
        }
        return a;
    }
};

注意:C++不支持负值左移,要用unsign int

相关问题:

不使用新的变量,交换两个变量的值

// 基于加减法
a = a + b;
b = a - b;
a = a - b;

// 基于异或运算
a = a ^ b;
b = a ^ b;
a = a ^ b; 

 

posted @ 2020-04-09 17:29  betaa  阅读(136)  评论(0编辑  收藏  举报