Pau*_*kin 5 c standards language-lawyer
我认为在ISO/IEC 9899:TC3 C标准的第6.2.6.2节中描述整数类型的符号位有错误
对于有符号整数类型,对象表示的位应分为三组:值位,填充位和符号位.不需要任何填充位; 应该只有一个符号位.作为值位的每个位应具有与相应无符号类型的对象表示中的相同位相同的值(如果有符号类型中有M个值位且无符号类型中有N,则M≤N).如果符号位为零,则不应影响结果值.如果符号位为1,则应以下列方式之一修改该值:
- 符号位0的相应值被否定(符号和幅度);
- 符号位的值为 - (2 ^ N)(二进制补码);
- 符号位的值为 - (2 ^ N - 1)(补码)
在上一节中,N被定义为有符号类型中的值位数,但这里是无符号类型中的值位数.
以signed char每字节8位和2位补码为例,这表示符号位的值为 - (2 ^ 8)= -256而不是 - (2 ^ 7)= -128.
我认为标准应该在初始段落中切换M和N,或者更改符号位的定义以使用M:
- 符号位的值为 - (2 ^ M)(二进制补码);
- 符号位的值为 - (2 ^ M - 1)(补码)
我错过了什么,或者这是一个错误?