将Z3整数表达式强制转换为C/C++整数
Casting a Z3 integer expression to a C/C++ int
我是Z3的新手,在这里和谷歌上搜索问题的答案。不幸的是,我没有成功。
我使用的是Z3 4.0 C/C++API。我声明了一个未定义的函数d:(Int-Int)Int,添加了一些断言,并计算了一个模型。到目前为止,这还不错。
现在,我想提取模型定义的函数d的某些值,比如d(0,0)。以下语句有效,但返回一个表达式,而不是d(0,0)的函数值,即整数。
z3::expr args[] = {c.int_val(0), c.int_val(0)};
z3::expr result = m.eval(d(2, args));
检查
result.is_int();
返回true。
我(希望不是太愚蠢)的问题是如何将返回的表达式强制转换为C/C++int?
非常感谢您的帮助。非常感谢。
Z3_get_numeral_int就是您想要的。
以下是文档摘要的摘录:
Z3_bool Z3_get_numeral_int(__in Z3_context c, __in Z3_ast v, __out int * i) Similar to Z3_get_numeral_string, but only succeeds if the value can fit in a machine int. Return Z3_TRUE if the call succeeded.
不过你应该小心。Z3的整数是数学整数,很容易超过32位整数的范围。从这个意义上说,使用Z3_get_numeral_string并将字符串解析为大整数是一个更好的选择。
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 如何在C++中将整数转换为其数字数组
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 将最小值整数转换为无符号长整型
- 为什么我们不能将使用异或运算找到的整数转换为字符?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 将74位整数转换为以31为底的整数
- 独立于实现的浮点/整数转换
- 以最少的步骤将给定整数转换为另一个整数
- 浮点到整数转换出错(即使浮点数已经是整数)
- 了解双精度转换与整数转换中的整数与截断关系
- 禁止具有精度损失的整数转换
- 将任意整数转换为 void*
- 将 32 位大端有符号整数转换为有符号小端整数
- char a[0] 使用 itoa() 将整数转换为字符串的目的
- 使用函数时从整数转换为字符串
- 尝试从整数转换为字符串的月份
- 如何在C++中将整数转换为字节,以便 Unity 在通过 UDP 传输后能够理解它们
- 如何将 Q 格式的整数转换为浮点数(反之亦然)
- 如何避免字符串到整数转换情况下的无效参数异常