python 整數越界問題

 python 內部自帶大整數運算能力,整數運算不會溢出,只要內存足夠,就oK

下面的例子演示了兩個32位整數加法的情況(通過位運算實現),爲了模擬溢出的效果,必須人工的進行位運算,~運算符除了求反,還是二進制的補運算符,運算過後的二進制數字按照補碼解釋,例如 ~(0011 1100) = (1100 0011) = -61

def getSum(a, b):
        """
        :type a: int
        :type b: int
        :rtype: int
        """
        MAX = 0X7fffffff
        MIN = 0X80000000
        while b != 0 :
          a,b = a^b,(a&b)<<1
          print(" a = {0:b},b =  {1:b}".format(a,b))
        return a 
def getSum_(a, b):
        """
        :type a: int
        :type b: int
        :rtype: int
        """
        MAX = 0x7FFFFFFF
        MIN = 0x80000000
        mask = 0xFFFFFFFF
        while b != 0:
            a, b = (a ^ b) & mask, ((a & b) << 1) & mask
            print(type(a))
            print(" a = {0:b},b =  {1:b}".format(a,b))
        return a if a <= MAX else ~(a^mask)
     
print(getSum_(-1,-1))
print(getSum(-1,1))


發佈了35 篇原創文章 · 獲贊 36 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章