首先,明确要实现什么功能。
因为,想实现即有在32位平台上的c++程序功能,有一个原来的hash算法需要实现,算法中涉及左移及加法,及溢出…Orz。
问题描述:用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。