代表是标准的一部分?
这个问题在这里已经有了答案:
C标准在6.2.6.2节中讨论了整数类型的表示。
它指定整数类型的二进制表示。 对于无符号类型,这些位分为值位和填充位。 填充位对值没有贡献; 不需要任何填充位。 对于签名类型,只有一个符号位。 带符号的类型可以用符号和幅度,二进制补码或补码表示(二进制补码几乎适用于现代系统)。
位的排序以及填充位的存在和数量是由实现定义的。 (大多数现代实现没有填充位)。
在C99中引入了填充位的概念以及对三个典型表示法的限制。
按位运算符( <<
, >>
, &
,等)是根据构成操作数值表示的位来定义的,但对表示的要求足够具体,以至于在大多数情况下这是明确的。 对<<
和>>
移位算子的描述具体说明,例如, E1 << E2
的结果是E1
× 2
E2
; 参见引用的N1570草案的第6.5.7节。
C ++标准有一个非规范性的注释,说它允许二进制补码,1的补码和整数类型的有符号幅度表示,但似乎没有明确的声明,表示不允许其他表示。 它确实要求“整体类型的表示应通过使用纯二进制编码系统来定义值”。 您可以在C ++标准的N4296工作草案(或任何其他草案中,或者在标准本身中,如果您有一份副本)中看到血淋淋的细节。
链接地址: http://www.djcxy.com/p/40405.html