思路

  1. 加法器原理
//进位 本位
1 + 0 = 01 进位 0 本位 1 
1 + 1 = 10 进位 1 本位 0 
0 + 0 = 00 进位 0 本位 0 
0 + 1 = 01 进位 0 本位 1 

只有 1 1 的情况会产生进位,即 & 操作可以获取进位
只有 1 0 的情况会产生本位为1 ,其他情况本位为1, 即通过 ^ 异或操作可以使得两数相加

以10进制为例
  1 2
+ 1 8
-------
  2 0  本位
  0 1  进位
存在进位 != 0时,需要把进位 升一位 然后迭代循环加一遍

  2 0
+ 1 0
-------
  3 0  本位
  0 0  进位
class Solution {
    public int add(int a, int b) {
        while(b != 0) {
            // 产生进位
            int carry = (a & b) << 1;
            // 加法
            a = a ^ b;
            b = carry;
        }
        return a;
    }
}

Q.E.D.


每一个平凡的日常都是连续的奇迹