我有两个不同大小的变量“a”和“b”,见下文。我有几个问题:
(1)如何将'a'的值复制到'b'?(即扩展操作)
(2)如何将'b'的值复制到'a'?(即截断操作)
谢谢。
a = BitVec('a', 1)
b = BitVec('b', 32)
我有两个不同大小的变量“a”和“b”,见下文。我有几个问题:
(1)如何将'a'的值复制到'b'?(即扩展操作)
(2)如何将'b'的值复制到'a'?(即截断操作)
谢谢。
a = BitVec('a', 1)
b = BitVec('b', 32)
对于扩展,我们使用ZeroExt
or SignExt
。将ZeroExt
添加“零”,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)
“分配”一个布尔变量,其值为sizep
的位向量,反之亦然。该公式只是说明当且仅当is时为真。这是一个示例(也可在此处在线获得)x
1
p == (x == 1)
p
x
1
x = BitVec('x', 1)
p = Bool('p')
solve(p == (x == 1), x == 0)
solve(p == (x == 1), x == 1)
solve(p == (x == 1), Not(p))
solve(p == (x == 1), p)