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

使用Python z3库做算法仿真时位异或操作报sort mismatch错误如何解决

错误根因

你遇到的sort mismatch是Z3运算时类型不匹配抛出的异常,具体触发原因有两个:

  • State初始化时self.state的所有元素都是Python原生整数,后续存储符号化的BitVec值参与运算时,两种类型无法直接做按位运算
  • mag函数的返回值是Python原生整数,没有转成Z3的BitVec类型,和BitVec类型的变量做异或时类型不匹配
修复步骤
  1. 调整State类的初始化逻辑,初始的状态值全部统一为32位BitVec常量
class State:
    def __init__(self):
        # 所有初始值转为32位BitVec常量,和seed类型统一
        self.state = [z3.BitVecVal(0, 32) for _ in range(0x270)]
        self.index = 0
  1. 修改mag函数,返回值统一为32位BitVec类型
def mag(i):
    # 返回值转32位BitVec常量,确保运算类型一致
    return z3.If(i == 0, z3.BitVecVal(0x0, 32), z3.BitVecVal(0x9908b0df, 32))
  1. 可选优化:把运算中用到的0x7fffffff、0x80000000等Python原生常量也用z3.BitVecVal(常量值, 32)包裹,避免隐式类型转换带来的潜在问题,修改后的运算代码如下:
s.state[i] = s.state[i + 0x18d] ^ ((s.state[i + 1] & z3.BitVecVal(0x7fffffff, 32) | s.state[i] & z3.BitVecVal(0x80000000, 32)) >> 1) ^ mag((s.state[1] & 1) *8)

做完以上修改后,所有运算对象都是32位BitVec类型,就不会再触发类型不匹配的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:45:03