Z3py:如何扩展和截断变量?

时间:2013-01-29 09:19:08

标签: z3

我有两个不同大小的'a'和'b'变量,见下文。我几乎没有问题:

(1)如何将'a'的值复制为'b'? (即延长操作)

(2)如何将'b'的值复制为'a'? (即截断操作)

感谢。

a = BitVec('a', 1)
b = BitVec('b', 32)

1 个答案:

答案 0 :(得分:8)

为了进行扩展,我们使用ZeroExtSignExtZeroExt将添加“0”,SignExt将“复制”符号位(即最高位)。对于截断,我们使用Extract,它可以提取任何比特子序列。这是一个小例子(也可在rise4fun在线获得)。

a = BitVec('a', 1)
b = BitVec('b', 32)
solve(ZeroExt(31, a) == b)
solve(b > 10, Extract(0,0,b) == a)

编辑:我们可以使用p == (x == 1)来“分配”布尔变量p,其值为x,其大小为{{1}反之亦然。公式1只是声明p == (x == 1)当且仅当px时才为真。以下是一个示例(也可在线提供here

1