問題概述
不使用運算符
+
和
-
,計算兩整數之和
思考
不使用
+
和
-
,那就隻能想到用位運算來處理了。思路如下:
- 兩數進行
(異或運算),可以得到兩個數在相同位上數值不同的相加結果^
- 兩數進行 &(與運算),可以得到哪些位該進位
- 如果與運算的結果為 ,代表兩數的所有位都是不同的數值,不需要進位,那麼第一步得到的結果就是最終的結果
- 如果與運算的結果不為 ,代表有位要進位,那麼需要将這個結果往左移一位
- 重複上面兩步,直到與運算結果為 ,即得到的就是正确的結果
實作代碼
public int getSum(int a, int b) {
while (b != 0) {
int t = a^b;
b = (a&b)<<1;
a = t;
}
return a;
}