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; } };