创建一个常量位向量

时间:2013-06-26 17:40:44

标签: c++ z3

我是Z3的新手并试图使用它的bitvector C ++ API。据我所知,类上下文中的方法bv_val(int n,unsigned sz)旨在创建一个大小为sz且值为n的位向量。 但为什么值n被限制为int类型?如果我使用值创建大小为10的位向量,会发生什么情况,例如超过2 ^ 64?

有人会给我一些建议吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

Z3 C ++ API提供了以下创建位向量值的方法。

    expr bv_val(int n, unsigned sz);
    expr bv_val(unsigned n, unsigned sz);
    expr bv_val(__int64 n, unsigned sz);
    expr bv_val(__uint64 n, unsigned sz);
    expr bv_val(char const * n, unsigned sz);

对于大小大于UINTMAX64的位向量值,我们必须使用字符串。例如:

    expr big = ctx.bv_val("1267650600228229401496703205376", 512);

其中ctx是Z3上下文对象。

答案 1 :(得分:0)

可能,你会得到这个问题的唯一答案是“因为开发者这样做了”。

我们实际上只能代表计算机科学中的有限数量。在设计API时,有时会出现关于某事物的最大值或最小值应该是什么的问题。在这种特殊情况下,n的最大值似乎为UINT_MAX(函数有unsigned int次重载。)

也许开发人员认为n > UINT_MAX不切实际的用例。没有一个心智正常的人会尝试它。

也许是因为用n > UINT_MAX执行操作对资源过于沉重(耗时太长,内存过多)。

也许是因为有一种方法可以将这种操作分成多个部分,因此无法在一次大型传递中执行它而不是问题。

也许有人只是没有想到它,并且确实需要传递n > UINT_MAX。在这种情况下,我相信您可以在bug tracker上提交问题。

最有可能的,只是因为有人认为:“足够好”。无论如何,这个问题无法真正得到解答。