天天看点

不使用 + 和 - 运算符计算两整数之和问题概述思考实现代码

问题概述

不使用运算符

+

-

,计算两整数之和

思考

不使用

+

-

,那就只能想到用位运算来处理了。思路如下:

  • 两数进行

    ^

    (异或运算),可以得到两个数在相同位上数值不同的相加结果
  • 两数进行 &(与运算),可以得到哪些位该进位
    • 如果与运算的结果为 ,代表两数的所有位都是不同的数值,不需要进位,那么第一步得到的结果就是最终的结果
    • 如果与运算的结果不为 ,代表有位要进位,那么需要将这个结果往左移一位
  • 重复上面两步,直到与运算结果为 ,即得到的就是正确的结果

实现代码

public int getSum(int a, int b) {
    while (b != 0) {
        int t = a^b;
        b = (a&b)<<1;
        a = t;
    }
    return a;
}