題目是:Calculate the sum of two integers a and b, but you are not allowed to use the operator +
and -
.
思路:兩個數的加法分為兩步,對應位相加和進位。
舉個簡單的例子:997+24
我們平時計算時是將對應位相加和進位同時計算,其實可以保留下進位,只計算對應位相加,保留進位的位置(值)。接下來,將進位向左移動一位,將上一步的結果與移位后的進位值進行對應位相加,直到沒有進位結束。
對於二進制數的而言,對應位相加就可以使用異或(xor)操作,計算進位就可以使用與(and)操作,在下一步進行對應位相加前,對進位數使用移位操作(<<)。
這樣就非常好理解下面的實現代碼。
1 int getSum(int a, int b) 2 { 3 while (b) 4 { 5 int c = a ^ b; 6 b = (a & b) << 1; 7 a = c; 8 } 9 return a; 10 }
最后,再給一個詳細的運行過程示意,計算523+1125.(另外,如果是有負數的話,算法也是可行的,可以去看一下補碼的相關內容)