模擬32位機器左移和加法

首先,明確要實現什麼功能。python

由於,想實現即有在32位平臺上的c++程序功能,有一個原來的hash算法須要實現,算法中涉及左移及加法,及溢出…Orz。c++


問題描述:用python實現原hash算法,需考慮32位環境。
解決思路:
首先敲幾行,看一下實際運行狀況:
32位機器上,c++程序:算法

1 << 31 == 2147483648
1 << 32 == 1
2304051616 + 94351853 == 94351636
...

因而邊測邊改,扣下以下代碼:函數

def leftMoveNum(i, num):
    s = bin(i)
    num %= 32
    #print 'len(s),', len(s)
    s = s[2:]
    #print 'orgin s, %34s' % s
    if len(s) < 32:
        c = 32 - len(s)
        s = c * '0' + s
    #print 'dest  s, %34s' % s

    s = ''.join(['0b', s[num:], num * '0'])
    #print 'end   s, %34s' % s
    return int(s, 2)

def add(a, b):
    num = a + b
    s = bin(num)
    s = s[2:]
    s = ''.join(['0b', s[-32:]])
    return int(s, 2)

程序主要利用函數bin和int,python操做數字的二進制字符串很過癮,但對邊界極值沒有檢查,還存有bug。code

相關文章
相關標籤/搜索