You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3位移位超64位时imap函数匹配失败及运算结果不一致问题

结果不一致的原因
  • 核心是两次运行的整数类型不同:
    1. Python IDLE中使用的是原生int类型:Python原生整数支持任意精度,没有固定位宽限制,也不存在符号位溢出问题。1 << 63会得到正整数9223372036854775808,和1 << 0异或后就是你看到的二进制1000...0001的正数值。
    2. 你本地运行的代码中,参与运算的1实际是有符号64位整数(常见为numpy.int64类型):有符号int64的最高位是符号位,执行1 << 63时会触发位宽溢出,最高位被识别为负号标记,最终得到的是负数,和1异或后就是你输出的带负号的数值,自然和table中存储的正整数无法匹配。
修复方案

运算前强制将操作数转换为Python原生整数即可,修改后代码如下:

def imap(k,l):
        # 强制转换为原生int避免有符号位溢出
        code = (int(1) << k) ^ (int(1) << l)
        from bisect import bisect_left
        idx = bisect_left(table, code) 
        if idx != len(table) and table[idx] == code:
                return idx
        raise ValueError

内容的提问来源于stack exchange,提问作者Juhee Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:00:02