首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >负整数的表示

负整数的表示
EN

Stack Overflow用户
提问于 2015-05-13 09:30:27
回答 2查看 1.8K关注 0票数 4

对于负整数的表示和运算,ISO-Prolog是否有任何规定/建议?可能是2的补充?

作为程序员/用户问:在对负整数执行位级操作时,是否有任何假设可以安全地进行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-13 11:10:01

ISO/IEC 13211-1对整数有几个要求,但不需要具体的表示.如果整数表示有界,则下列条件之一有效

7.1.2整数 ..。 minint = -(*minint) minint = -(maxint+1)

此外,9.4位函子中列出的可评估函子,即(>>)/2(<<)/2(/\)/2(\/)/2(\)/1xor/2是为负值定义的实现。例如,

8.4.1 (>>)/2 -按位右移 9.4.1.1说明 ..。 该值应是根据以下情况定义的实现: 移位是符合逻辑的(用零填充)还是算术 (填写符号位的副本)如果.The值为负值,则VS值将被定义为 或者VS大于整数的位大小。

请注意,实现定义意味着符合标准的处理器必须在附带的文档中记录这一点。因此,在使用符合标准的处理器之前,您必须阅读手册。

事实上,目前没有不提供算术右移且不使用2补体的Prolog处理器(我知道)。

票数 4
EN

Stack Overflow用户

发布于 2015-05-15 18:41:37

严格地说,这是两个不同的问题:

  1. 实际的物理表示:这在Prolog级别上是不可见的,因此标准没有什么可说的。请注意,许多Prolog系统有两个或多个内部表示(例如,两个补码、固定大小和sign+magnitude值),但向程序员表示一个整数类型。
  2. 按位操作的结果:虽然标准定义了这些操作,但保留了它们的许多行为实现定义。这是因为(a)没有办法指定位模式的宽度,(b)没有承诺在负数和位模式之间进行特定的映射。

这不仅意味着对负数的所有按位运算都不是可移植的,而且还有一种奇怪的效果,即按位否定的结果是完全由实现定义的(即使是积极的参数):Y is \1可以合法地给出-2,268435454,2147483646,9223372036854775806等。你所知道的就是两次否定返回原来的数字。

幸运的是,在实践中,似乎已经对http://eclipseclp.org/Specs/iso_conformity.html#9.4达成了共识。

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

https://stackoverflow.com/questions/30210801

复制
相关文章

相似问题

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