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

时间:2015-02-18 18:36:07

标签: c++ bit-manipulation

一个人可以假设整数'记忆中的表现?

切片和拼接整数的可移植方式是如何进行逐位操作的?

1 个答案:

答案 0 :(得分:3)

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

它指定整数类型的二进制表示。对于无符号类型,这些位分为值位填充位。填充比特对该值没有贡献;不需要任何填充位。对于签名类型,有一个符号位。签名类型可以使用符号和幅度两个补码一个补码来表示(两个补码几乎是现代系统的通用)。< / p>

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

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

按位运算符(<<>>&等等是根据构成操作数值表示的位来定义的,但要求是表示足够具体,这对于大多数情况来说是明确的。 <<>>移位运算符的说明明确指出,E1 << E2的结果为E1×2 {{1 }} ;参见引用的N1570草案第6.5.7节。

C ++标准有一个非规范性的说明,它表示它允许积分类型的2的补码,1的补码和带符号的幅度表示,但似乎没有明确的声明,不允许其他表示。它确实要求“整数类型的表示应使用纯二进制计算系统定义值”。您可以在C ++标准的N4296 working draft(或任何其他草案中,或者如果您有副本,可以在标准本身中)查看血淋淋的详细信息。