是的,您可以使用诸如bv2int和 之类的东西int2bv。请注意,位向量长度很重要,并且 int2bv 是参数化的(需要位向量长度)。
这是一个最小的例子(rise4fun链接: http: //rise4fun.com/Z3/wxcp):
(declare-fun x () (_ BitVec 32))
(declare-fun y () Int)
(declare-fun z () (_ BitVec 16))
(assert (= y 129))
(assert (= (bv2int x) y))
; (assert (= ((_ int2bv 32) y) x)) ; try with this uncommented
(assert (= ((_ int2bv 16) y) z))
(check-sat)
(get-model)
(get-value (x y z)) ; gives ((x #x00000000) (y 129) (z #x0081))
Run Code Online (Sandbox Code Playgroud)
另一个例子在这里:
目前看来这些功能可能存在一些问题:使用 Z3 检查溢出
bv2nat这些也可能在其他求解器(和)中以不同的名称调用nat2bv:http://smtlib.cs.uiowa.edu/theories/FixedSizeBitVectors.smt2