###371. Sum of Two Integers

题目:
<https://leetcode.com/problems/sum-of-two-integers/>


难度:

Easy


思路


谷歌答案


位运算

```
XOR
x   y output
0	0	0
1 	0	1
0	1	1
1	1	0


AND
x	y	output
0	0	0
1	0	1
0	1	1
1	1	1	

```

如果对x和y来做加法（x和y都是一位的），那么末位会是x xor y，进位会是x and y





python没有左移，用c++来看

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

实际上看到答案还是没有那么明白的，还是动手算算



```
a = 6 	(0110)
b = 15 	(1111)


1st
---------
carry = a & b = 0110
a = a ^ b = 1001
b = 1100


2nd 
---------
carry = a & b = 1000
a = a ^ b =  0101
b = 10000


3rd
----------

carry = a & b = 0
a = a ^ b = 10101
b = 0

这个时候a 的值是2^4 + 2^2 + 2^0 = 16+4+1 = 21  
```

虽然convence了我自己，但是表示依旧迷茫ing

也知道位运算需要待补啊