xqn2017

导航

371. Sum of Two Integers

原文题目:

371. Sum of Two Integers

解题:

不使用+-实现两个数的加法,想到的第一个方法就是用位运算,位运算中很常用的就是异或运算,而XOR其实就是不考虑进位的加法,比如说1+3,也就是01+11不考虑进位的话,结果就是10,而1^3=2,符合预期,所以说采用异或时没有考虑进位,那进位该怎么办,可以用相与&得到需要进位的Bit位。而所有的进位都是往前进了以为,可以认为是左移了一位,因此可以采用如下代码:

class Solution {
public:
    int getSum(int a, int b) 
	{
        int carbit = 0;
		while(b)
		{
			carbit = a&b;
			a = a^b;
			b = carbit << 1;
		}
		return a;
    }
};

  

posted on 2018-02-26 17:34  xqn2017  阅读(109)  评论(0编辑  收藏  举报