一開始做看不懂,後來琢磨了一下,在**附近寫了注釋,這其實就是很簡單的位運算,只是需要熟練:
def
add(a,b)
: a &
=0xffffffff
b &=0xffffffff
while b !=0:
#終止條件:沒有進製了
carry = a & b #把需要進製的位顯示出來,用1表示該位需要進製
a ^= b #第一次迴圈為求出不需要進製的位,將需要進製的位用0表示
#下面的迴圈為將不需要進製的位與進製融合
b =((carry)
<<1)
&0xffffffff
#將1表示的進製左移,也就是準備開始賦進製
return a if a <
0x80000000
else
~(a^
0xffffffff
)#判斷是否為負數
總結:
1、顯示需要進製的位 a&b(1 1)
2、顯示不需要進製的位 a^b(1 0 ,0 0)
3、進製a^b
4、判斷是否正數 if a < 0x80000000
LeetCode 不用加號的加法(位運算)
解題思路 位運算,只能用位運算子。a b同號比較好處理。主要是異號的情況,考慮 a 0,b 0,因為 a,b的絕對值都不會超過2 32,因此取模數為2 32。根據同餘方程可知 a b mod a mod b mod,mod b即為負數b在mod下的補碼 b int 1 32,2 如果 a mod b...
不用加號完成加法運算(2)
今天乙個小朋友問了我乙個很有意思的問題 不用加號的加法運算 大抵就是說,誒 網上有人不用 就可以實現加法喲 這個問題以前大學的時候玩過,是乙個很有意思的問題。每個人小學的時候,都學過四則運算,但是因為四則運算太簡單了,我們誰也沒有注意過我們學習的四則運算包括術式的寫法有乙個前提,就是 在十進位制中!...
不用 實現加法運算
寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。示例 輸入 a 1,b 1 輸出 2a,b 均可能是負數或 0 結果不會溢位 32 位整數 我覺得寫這個題一定要對原反補碼的機制非常熟悉,其實加減乘除本身就是我們人自己的思維,在硬體底層笨豬cpu是沒有這麼複雜的想法的,首先cpu只有...