给你两个整数 ab不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和。

 

示例 1:

输入:a = 1, b = 2
输出:3

示例 2:

输入:a = 2, b = 3
输出:5

 

提示:

  • -1000 <= a, b <= 1000
Related Topics
  • 位运算
  • 数学

  • 👍 459
  • 👎 0
  • 
    /**
     * 与&:0&0=0 0&1=0 1&0=0 1&1=1
     * 异或^:0^0=0 0^1=1 1^0=1 1^1=0
     *
     * 异或计算,运行后能表示当前位置相加之后的值是0还是1
     * 01010  ^
     * 11011
     * 10001   结果1
     *
     * 与运算能表示,当前位运算之后是否需要进位
     * 01010  &
     * 11011
     * 01010   结果2
     * 所以需要把结果2再左移一位再次和结果1做异或运算,如此循环直到结果2为0
     * 10001
     * 10100
     * 00101    ^结果
     * 10000    &结果
     * 继续处理
     * 000101
     * 100000
     * 100101   ^结果
     * 000000   &结果
     * 结束
     */
    class Solution {
        public int getSum(int a, int b) {
            int c = (a & b) << 1;
            a = a ^ b;
            int tmp = 0;
            while (c != 0){
                tmp = a;
                a = a ^ c;
                c = (tmp & c) << 1;
            }
            return a;
        }
    }