371. 兩整數(shù)之和
題目
不使用運(yùn)算符+ 和-旨枯,計(jì)算兩整數(shù)a攀隔、b之和账胧。
示例 1:
輸入: a = 1, b = 2
輸出: 3
示例 2:
輸入: a = -2, b = 3
輸出: 1
思路
從上面的表格就可以發(fā)現(xiàn)治泥,低位 = a^b居夹,進(jìn)位 = a & b本冲。這樣的計(jì)算可能要持續(xù)多次,回想一下在十進(jìn)制的計(jì)算中狸膏,如果進(jìn)位一直大于0添怔,就得往后面進(jìn)行計(jì)算贤旷,在這里也是一
樣幼驶,只要進(jìn)位不是0盅藻,我們就得一直重復(fù)計(jì)算低位和進(jìn)位的操作(需要在下一次計(jì)算之前要把進(jìn)位向左移動(dòng)一位,這樣進(jìn)位才能和更高位進(jìn)行運(yùn)算)畅铭。這個(gè)時(shí)候的a和b就是剛才計(jì)算的低位和進(jìn)位氏淑,用簡單的加法迭代的代碼表示:
代碼
class Solution {
public int getSum(int a, int b) {
if (a==0) return b;
if (b==0) return a;
int lower;
int carrier;
while (true) {
lower = a^b; // 計(jì)算低位
carrier = a&b; // 計(jì)算進(jìn)位
if (carrier==0) break;
a = lower;
b = carrier<<1;
}
return lower;
}
}