Python 解決面試題47 不用加減乘除做加法


       在看《劍指Offer》過程中,面試題47不用加減乘除做加法,給出的思路是使用二進制的異或以及與運算,總之就是使用二進制。但是在使用Python實現的過程中,對於正整數是沒有問題的,但是對於負數,會出現死循環情況。這是為什么呢?因為在Python中,對於超出32位的大整數,會自動進行大整數的轉變,這就導致了在右移位過程中,不會出現移到了0的情況,也就會造成了死循環。

     這里需要了解的是Python中整數實現的原理以及二進制中的移位等原理。

     已經知道了右移過程中大整數的自動轉化,導致變不成0,那么只需要在移動的過程中加一下判斷就行了,把craay的值和0xFFFFFFFF做一下比較就可以了,具體代碼如下所示。

 

1 def bit_add(n1, n2):
2     carry = 1
3     while carry:
4         s = n1 ^ n2
5         carry = 0xFFFFFFFF & ((n1 & n2) << 1)
6         carry = -(~(carry - 1) & 0xFFFFFFFF) if carry > 0x7FFFFFFF else carry
7         n1 = s
8         n2 = carry
9     return n1

 

     其實在Python中,可以直接使用內置函數sum求和,不過我感覺sum源碼中會用到+?不確定,需要看源碼才行。

1 def add(n1, n2):
2     return sum([n1, n2])

 


免責聲明!

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



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