模拟32位机器左移和加法

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了模拟32位机器左移和加法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

首先,明确要实现什么功能。

因为,想实现即有在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。

脚本宝典总结

以上是脚本宝典为你收集整理的模拟32位机器左移和加法全部内容,希望文章能够帮你解决模拟32位机器左移和加法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。