371. Sum of Two Integers

题目:

计算两个整数A和B相加,但你不允许使用运算符+和-

例子:
例如,A= 1 和 B = 2, return 3.


分析:DONE

说实话每次看到位运算我就头疼。其实不会此问题,纯属学习!虽然知道用位运算,知道与或非的原理!
可以很容易地用异或操作模拟实现整数加法运算里面不进位的结果:
对应与运算及其右移1位运算可以得到所有的进位,
进位一旦为0便没有继续进行的必要了,如:a=010010,b=100111,计算步骤如下:
第一轮:a^b=110101,(a&b)<<1=000100, 由于进位(000100)大于0,
则进入下一轮计算,a=110101,b=000100,a^b=110001,(a&b)<<1=001000,
由于进位大于0,则进入下一轮计算:a=110001,b=001000,a^b=111001,(a&b)<<1=0,
进位为0,终止,计算结果为:111001。

class Solution {
public:
    int getSum(int a, int b) {
        if (a == 0) return b;  
        if (b == 0) return a;  
        int carry=0,add=0;
        while (b != 0) {  
            add = a ^ b;  //模拟加运算
            carry = (a & b) << 1;  //获取进位
            a=add;//保存本次计算结果
            b=carry;
        }  
      
        return a; 
    }
};

注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!

原文地址:http://blog.csdn.net/ebowtang/article/details/51812032

原作者博客:http://blog.csdn.net/ebowtang

本博客LeetCode题解索引:http://blog.csdn.net/ebowtang/article/details/50668895

点赞