首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用BitVector对有符号整数进行建模?

如何用BitVector对有符号整数进行建模?
EN

Stack Overflow用户
提问于 2013-07-24 15:26:02
回答 2查看 2.9K关注 0票数 5

假设a是8位值254的整数.如果a是一个有符号整数,它实际上被认为是-2。相反,如果a没有签名,它仍然是254

我试图用BitVector理论和Z3建立这个有符号/无符号整数问题的模型,但是BitVector似乎不允许这样做。这是真的吗?那么,对于如何在Z3py中建模,有什么想法吗?

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-24 16:09:28

Z3有用于签署和未签署解释的API。例如,在C中,Z3_mk_bvslt创建签名小于,而Z3_mk_bvult创建未签名的。在Z3Py,我们超载了<<=,.用那些签名的。为了创建未签名的a < b,我们必须使用ULT(a,b)。以下是未签名操作符的列表:ULE (<=)、ULT (<)、UGE (>=)、UGT (>)、UDiv (无符号除法)、URem (无符号余数)。您可以在这里找到更多信息:

http://research.microsoft.com/en-us/um/redmond/projects/z3/namespacez3py.html

票数 10
EN

Stack Overflow用户

发布于 2013-07-24 16:09:09

你观察到位向量值不带符号是正确的.另一方面,有符号版本的位向量运算和关系.因此,您可以将相同的位向量实体视为有符号或无符号的数字,方法是将它们传递给有符号或无符号比较(签名减/无符号减)或有符号或无符号操作(有符号除法/无符号除法)。其他算术运算在有符号实体和无符号实体上也是一样的。例如,无论您想要将位解释为已签名还是无符号,加法都是以相同的方式移动。

Z3遵循SMT-LIB2 2理论的惯例,您可以在:http://smtlib.cs.uiowa.edu/theories/FixedSizeBitVectors.smt2上找到关于这些理论的详细文档。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17838424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档