关于c ++:整数位表示的哪一部分是标准的一部分?

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

本问题已经有最佳答案,请猛点这里访问。

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

位操作是如何将整数切片和拼接在一起的?


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

它指定整数类型的二进制表示形式。对于无符号类型,位分为值位和填充位。填充位对值不起作用;不必有任何填充位。对于有符号类型,有一个符号位。符号类型可以用符号和量值、二的补码或一的补码来表示(二的补码在现代系统中几乎是通用的)。

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

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

位运算符(<<>>&等)是根据构成操作数值表示的位来定义的,但对表示的要求足够具体,大多数情况下这是明确的。<<>>轮班操作人员的描述特别指出,例如,E1 << E2的结果是E1×2E2;见引用N1570草案第6.5.7节。

C++标准有一个非规范的注释,它表示允许2的补码、1的补码和整数类型的符号幅值表示,但是似乎没有明确的声明,不允许其他表示。它确实要求"整数类型的表示应使用纯二进制数制来定义值"。您可以看到在N496的工作草案的C++标准(或任何其他草案,或在标准本身,如果你有一个副本)的血淋淋细节。