我有两个不同大小的'a'和'b'变量,见下文。我几乎没有问题:
(1)如何将'a'的值复制为'b'? (即延长操作)
(2)如何将'b'的值复制为'a'? (即截断操作)
感谢。
a = BitVec('a', 1)
b = BitVec('b', 32)
答案 0 :(得分:8)
为了进行扩展,我们使用ZeroExt
或SignExt
。 ZeroExt
将添加“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)
当且仅当p
为x
时才为真。以下是一个示例(也可在线提供here)
1