問題描述:
寫乙個函式,求兩個整數之和,要求在函式體內不得使用 「+」、「-」、「*」、「/」 四則運算符號。
示例:
計算機裡面的加法運算採用的是二進位制計算,如果是負數則需要使用補碼進行計算,不考慮進製,則是兩個數進行異或運算,考慮進製就需要加上兩個數相與後的結果。所以兩個數的相加運算可以分解為a^b加上a&b進製的結果,此時進製需要左移一位才是到時候計算時需要的真正的進製。
其中sum表示無進製的計算結果,num2表示的是有進製的計算結果,每次左移相當於把進製加到原本應該進製的位置上,為什麼要迴圈進行,就是為了將每次相加時兩個數的進製全部計算一遍,舉個例子,比如a ^ b 這個計算結果表示無進製,下乙個a&b左移以為表示有進製,當存在進製的時候,下一次計算就變為了上一次無進製的加上上一次有進製的數這兩個數做一次異或運算,如果有進製繼續進行,直到無進製產生。(可以參考
c++需要注意負數這一情況,使用unsigned int。
class
solution
return num1;}}
;
不用加減乘除做運算
1 乙個數擴大n倍 直接用移位,擴大n倍相當於是原來的 n 1 倍,例擴大7倍,則是原來的8倍,那就左移3位 2 不使用新的變數,交換兩個變數的值 用異或運算 a a b b a b a a b 3 求兩個整數之和 對數字做運算,除了四則運算之外,也 就只剩下位運算了。位運算是針對二進位制的,我們就...
不用加減乘除做加法
author 過路的守望 思路 i 先將各bit位相加,不計進製,這一步可以用m n實現 ii 加上進製,進製如何來,用m n可以得到m和n中都為1的bit位,而不全為1的位則全部變為了0,該位相加會發生進製,使得左邊一位加1,因此 m n 1邊可得到進製後要加的1的位置 iii 將前面兩步的結果相...
不用加減乘除做加法
首先看十進位制是如何做的 5 7 12,三步走 第一步 相加各位的值,不算進製,得到2。第二步 計算進製值,得到10.如果這一步的進製值為0,那麼第一步得到的值就是最終結果。第三步 重複上述兩步,只是相加的值變成上述兩步的得到的結果2和10,得到12。同樣我們可以用三步走的方式計算二進位制值相加 5...