如何在 C++ 中获取 z3 表达式的整数值
how to get integer value of a z3 expression in c++
我这里有这段代码,它在 C++ 中添加了两个 z3 位向量值
expr Z3_LHS=z3_ctx.bv_val(0, 64);
expr Z3_RHS=z3_ctx.bv_val(8, 64);
output=Z3_LHS+Z3_RHS;
当我打印输出时,我得到
bvadd #x0000000000000000 #x0000000000000008
请问我怎样才能得到这个输出表达式的整数值,它应该是 8 而不是这一长行。换句话说,我想将这个表达式计算为一个整数值。
这样做有点奇怪,因为您不会使用 z3 来添加常数。但是,这里是您如何使用 C++ api:
编写您想要的代码
#include <z3++.h>
using namespace z3;
using namespace std;
int main ()
{
context c;
expr lhs = c.bv_val(0, 64);
expr rhs = c.bv_val(8, 64);
expr out = lhs+rhs;
solver s(c);
cout << s.check() << "\n";
model m = s.get_model();
cout << m.eval(out).get_numeral_int64() << "\n";
return 0;
};
假设你把它放在一个名为 a.cpp
的文件中,这就是我得到的:
$ g++ -std=c++11 a.cpp -l z3
$ ./a.out
sat
8
我这里有这段代码,它在 C++ 中添加了两个 z3 位向量值
expr Z3_LHS=z3_ctx.bv_val(0, 64);
expr Z3_RHS=z3_ctx.bv_val(8, 64);
output=Z3_LHS+Z3_RHS;
当我打印输出时,我得到
bvadd #x0000000000000000 #x0000000000000008
请问我怎样才能得到这个输出表达式的整数值,它应该是 8 而不是这一长行。换句话说,我想将这个表达式计算为一个整数值。
这样做有点奇怪,因为您不会使用 z3 来添加常数。但是,这里是您如何使用 C++ api:
编写您想要的代码#include <z3++.h>
using namespace z3;
using namespace std;
int main ()
{
context c;
expr lhs = c.bv_val(0, 64);
expr rhs = c.bv_val(8, 64);
expr out = lhs+rhs;
solver s(c);
cout << s.check() << "\n";
model m = s.get_model();
cout << m.eval(out).get_numeral_int64() << "\n";
return 0;
};
假设你把它放在一个名为 a.cpp
的文件中,这就是我得到的:
$ g++ -std=c++11 a.cpp -l z3
$ ./a.out
sat
8