天天看點

不使用 + 和 - 運算符計算兩整數之和問題概述思考實作代碼

問題概述

不使用運算符

+

-

,計算兩整數之和

思考

不使用

+

-

,那就隻能想到用位運算來處理了。思路如下:

  • 兩數進行

    ^

    (異或運算),可以得到兩個數在相同位上數值不同的相加結果
  • 兩數進行 &(與運算),可以得到哪些位該進位
    • 如果與運算的結果為 ,代表兩數的所有位都是不同的數值,不需要進位,那麼第一步得到的結果就是最終的結果
    • 如果與運算的結果不為 ,代表有位要進位,那麼需要将這個結果往左移一位
  • 重複上面兩步,直到與運算結果為 ,即得到的就是正确的結果

實作代碼

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