gpt4 book ai didi

c - 是否有支持负零或将其保留为陷阱表示的任何实现?

转载 作者:太空宇宙 更新时间:2023-11-03 23:46:51 24 4
gpt4 key购买 nike

在当今时代的大多数实现中,符号位为 1 而值位为全 0 的位模式的有符号整数值往往代表该有符号整数类型的最低可能值。

然而,作为6.2.6.2p2状态,这不是要求:

Which of these applies is implementation-defined, as is whether the value with sign bit 1 and all value bits zero (for the first two), or with sign bit and all value bits 1 (for ones' complement), is a trap representation or a normal value.

我的第一个问题很简单:是否有任何实现将此位模式用于负零或陷阱表示?如果这个问题的答案是“否”,那么我的后续问题的答案也必须是“否”。

根据该问题,6.2.6.2p3声明当负零分配给对象时,它可能(或可能不会)转换为常规零:

It is unspecified whether these cases actually generate a negative zero or a normal zero, and whether a negative zero becomes a normal zero when stored in an object.

我的后续问题:

  1. 是否有任何实现使用陷阱表示而不是该位模式的负零?
  2. 是否有任何使用负零存储为不同值的实现?
  3. 是否有任何使用存储为常规零的负零的实现?

为澄清而编辑:我不是询问在使用一个补码、二进制补码或带符号整数的符号和幅度表示的系统中理论上可能发生什么。我可以在这个问题前面引用的部分中找到(并且已经找到)该信息。我问的是实际做了什么

最佳答案

Iskar Jarak 引起我的注意在评论中,最近于 2015 年 2 月发布的 OS2200 具有称为 UCS C 的 C 实现,其中 the manual第 2-29 页的文档:

  • 符合标准的 C 实现,其中 "... 不使用 CONFORMANCE/TWOSARITH,负零等于所有使用小于 (<) 或等于 (=) 的 36 位无符号整数比较中的零. 在使用大于 (>) 的无符号比较中,(236)-1 大于零。”
  • 一个符合问题的 C 实现,其中 “CONFORMANCE/TWOSARITH 导致负零 (236)-1 被生成的代码视为一个大的无符号整数。” 因为这违反了几个 C 标准条款(6.2.6.2p2 声明 “符号位的值为 -(2M)(二进制补码)”“符号位的值为 -(2M-1)(个的补码)”6.3.1.1p3 声明 “整数提升保留包括符号的值”,与在 UCS/OS2200 文档中指定的转换为 一个大的无符号整数 相矛盾)因此,只有当负零位模式被视为陷阱表示时,这才符合要求,其中- 通过调用未定义的行为,因此标准的约束不再适用。

总而言之,...

Are there any implementations that use this bit pattern for a negative zero or a trap representation?

是的。提供的示例可以将此位模式用于负零陷阱表示,具体取决于编译器一致性选项。


对于后续问题 1 和 2,OS2200 上的 UCS C 是这两个示例。

至于问题 3,改天再回答......我的时间到此结束:)

关于c - 是否有支持负零或将其保留为陷阱表示的任何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30586217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com