Leetcode 371: Sum of Two Integers(使用位運算實現)


題目是: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.(另外,如果是有負數的話,算法也是可行的,可以去看一下補碼的相關內容)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM