整数位表示的哪一部分是标准的一部分?

What part of integer bit-representation is part of The Standard?

关于整数在内存中的表示,人们可以假设多少?

按位运算将整数切片和拼接在一起的可移植方式如何?

C standard 在第 6.2.6.2 节中讨论了整数类型的表示。

它指定整数类型的二进制表示。对于无符号类型,位分为值位填充位。填充位对值没有贡献;不需要任何填充位。对于有符号类型,只有一个符号位。有符号类型可以使用 符号和大小补码补码(补码对于现代系统来说几乎是通用的。

位的顺序以及填充位的存在和数量是实现定义的。 (大多数现代实现没有填充位)。

C99 中引入了填充位的概念以及对三种规范表示的限制。

按位运算符(<<>>& 等)是根据构成操作数值表示的位来定义的,但是对表示的要求足够具体,以至于在大多数情况下都是明确的。 <<>> 移位运算符的描述具体说,例如 E1 << E2 的结果是 E1 × 2E2;请参阅引用的 N1570 草案的第 6.5.7 节。

C++标准有一个非规范的注释说它允许整数类型的2的补码、1的补码和带符号的大小表示,但似乎没有明确声明不允许其他表示。它确实需要 "The representations of integral types shall define values by use of a pure binary numeration system."。您可以在 C++ 标准的 N4296 working draft 中(或在任何其他草案中,或者在标准本身中,如果您有副本)看到血淋淋的细节。