这是C标准中整数类型的符号位定义中的错误吗?
我认为在第6.2.6.2节中描述整数类型的符号位时出现错误 对于有符号整数类型,对象表示的位应为 可分为三组:值位、填充位和符号 一点不需要任何填充位;应该只有一个 符号位。作为值位的每个位的值应与 对应对象的对象表示中的相同位 无符号类型(如果有符号类型中有M个值位,而有符号类型中有N个值位 无符号类型,然后是M≤ N) 。如果符号位为零,则不应为零 影响结果值。如果符号位为1,则该值应为 通过以下方式之一进行修改:这是C标准中整数类型的符号位定义中的错误吗?,c,standards,language-lawyer,C,Standards,Language Lawyer,我认为在第6.2.6.2节中描述整数类型的符号位时出现错误 对于有符号整数类型,对象表示的位应为 可分为三组:值位、填充位和符号 一点不需要任何填充位;应该只有一个 符号位。作为值位的每个位的值应与 对应对象的对象表示中的相同位 无符号类型(如果有符号类型中有M个值位,而有符号类型中有N个值位 无符号类型,然后是M≤ N) 。如果符号位为零,则不应为零 影响结果值。如果符号位为1,则该值应为 通过以下方式之一进行修改: 符号位为0的对应值为负数(符号和幅值) 符号位具有该值−(2^N)(二者的
- 符号位为0的对应值为负数(符号和幅值)李>
- 符号位具有该值−(2^N)(二者的补充)李>
- 符号位具有该值−(2^N− 1) (一人之补)
- 符号位具有该值−(2^M)(二者的补充)李>
- 符号位具有该值−(2^M− 1) (一人之补)
N
切换到使用M
:
- 符号位具有该值−(2M)(二者的补充)李>
- 符号位具有该值−(2米− 1) (一人之补)
1
也适用于段落2
,这不是一个不合理的解释,它只是在以下情况下非常模糊:
(如果有
有符号类型中的M个值位和无符号类型中的N个值位,那么M最有益的(就意图而言,可能是正确的)解释可能是,第1段中N的第一个定义适用于整个部分,除了第2段中的附加注释,其中N(和M)暂时给出了一个不同的定义。但是是的,充其量也有点模棱两可。归咎于英语的变量作用域规则太差。谢谢你的回答。但是我认为只有美国程序员才会认为N的第二个定义只会在parens内部隐藏第一个定义:)最终的C11标准也使用-(2^M)和-(2^M-1)。