在执行位向量操作时,是否有更简单的方法来获得即时答案。 a = 1百万,b = 0,什么是a&b(答案:0)
此方法有效,但必须引入虚拟变量来存储答案:
(declare-const a (_ BitVec 64))
(declare-const b (_ BitVec 64))
(declare-const ans (_ BitVec 64))
(assert (= a (_ bv1000000 64)))
(assert (= b (_ bv0000000 64)))
(assert (= ans (bvand a b)))
(check-sat)
(get-model)
此方法是我想要的,但是我的代码提供了demorgan身份:
(declare-const a (_ BitVec 64))
(declare-const b (_ BitVec 64))
(simplify (bvand a b))
答案 0 :(得分:1)
您可以使用该模型评估任意表达式,例如:
(declare-const a (_ BitVec 64))
(declare-const b (_ BitVec 64))
(assert (= a (_ bv1000000 64)))
(assert (= b (_ bv0000000 64)))
(check-sat)
(eval (bvand a b))
说
sat
#x0000000000000000
答案 1 :(得分:0)
我没有测试,但是应该使用(apply (then propagate-values simplify))
之类的方法