首先,明确要实现什么功能。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