【发布时间】:2019-12-02 07:10:51
【问题描述】:
C99 标准第 6.2.6.1 8 节规定:
当运算符应用于具有多个对象的值时 表示,不影响使用哪个对象表示 结果的值 (43)。值存储在对象中的位置 该值具有多个对象表示的类型,它 未指定使用哪种表示,但是一个陷阱表示 不会生成。
我理解对象是指内存中的一个位置(字节),值是基于用于访问它的类型对这些字节的解释。如果是,那么:
- 一个值如何有多个对象表示?
- 一个类型如何可以有多个对象表示一个值?
标准在脚注中添加了以下内容:
不过,我还不清楚。有人可以帮我简化一下并举例说明吗?
【问题讨论】:
-
例如,如果使用符号/大小对数字进行编码,则将有两个值表示
0:正零和负零。 -
有一篇关于浮点数及其编码(即对象表示)here的相关文章。例如,值
1.5可以有多个n 位固定或浮点类型的表示。关于您的附录 43)我认为这与解释位有关,例如作为有符号/无符号整数,或作为浮点数等。 -
@Blaze:是的,使用符号和大小,是表示数学零的两种方式,但它们在 C 标准的含义上不是同一个值。请注意,我们可以区分它们:如果
x为正零,y为负零,并且它们是 32 位,则x|1为 +1,y|1为 -1。正如我们从脚注的最后一句中看到的,x和y上的“其他操作”区分了它们,表明它们没有与 C 定义的术语相同的“值”,即使x == y评估为真。 C 将“值”定义为“精确含义”(3.19),而不是数学值。 -
@EricPostpischil 啊,所以即使按位运算,它们也需要具有相同的值。感谢您的详细解释。
标签: c