位运算:Leetcode371.两整数之和

题目描述:

给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。

示例 1:

输入:a = 1, b = 2
输出:3

示例 2:

输入:a = 2, b = 3
输出:5

思路:没学过位运算之前,拿到这道题是肯定是懵的,学过后可以当成模版来计算两数相加问题,我们知道两数相加可以转化为两个二进制数每一位相加再加上进位的数。我们把a+b转换成先算a^b表示a与b二进制无进位相加),再(a&b)<<1表示a+b的进位),用无进位相加的结果加上进位的数便可得到结果。问题是如果结果中依然有进位呢?很简单,再次重复上述步骤直到进位结果为0,那么该次无进位相加的结果就是最终结果。

代码实现:

class Solution {
public:
    int getSum(int a, int b) {
        while(b!=0)
        {
            int x=a^b;//无进位相加结果
            int carry=(a&b)<<1;//算出进位
            a=x;
            b=carry;
        }
        return a;
    }
};

你可能感兴趣的:(算法,数据结构)