对于负整数的表示和运算,ISO-Prolog是否有任何规定/建议?可能是2的补充?
作为程序员/用户问:在对负整数执行位级操作时,是否有任何假设可以安全地进行?
发布于 2015-05-13 11:10:01
ISO/IEC 13211-1对整数有几个要求,但不需要具体的表示.如果整数表示有界,则下列条件之一有效
7.1.2整数 ..。 minint = -(*minint) minint = -(maxint+1)
此外,9.4位函子中列出的可评估函子,即(>>)/2、(<<)/2、(/\)/2、(\/)/2、(\)/1和xor/2是为负值定义的实现。例如,
8.4.1 (>>)/2 -按位右移 9.4.1.1说明 ..。 该值应是根据以下情况定义的实现: 移位是符合逻辑的(用零填充)还是算术 (填写符号位的副本)如果.The值为负值,则
VS值将被定义为 或者VS大于整数的位大小。
请注意,实现定义意味着符合标准的处理器必须在附带的文档中记录这一点。因此,在使用符合标准的处理器之前,您必须阅读手册。
事实上,目前没有不提供算术右移且不使用2补体的Prolog处理器(我知道)。
发布于 2015-05-15 18:41:37
严格地说,这是两个不同的问题:
这不仅意味着对负数的所有按位运算都不是可移植的,而且还有一种奇怪的效果,即按位否定的结果是完全由实现定义的(即使是积极的参数):Y is \1可以合法地给出-2,268435454,2147483646,9223372036854775806等。你所知道的就是两次否定返回原来的数字。
幸运的是,在实践中,似乎已经对http://eclipseclp.org/Specs/iso_conformity.html#9.4达成了共识。
https://stackoverflow.com/questions/30210801
复制相似问题