一个人可以假设整数'记忆中的表现?
切片和拼接整数的可移植方式是如何进行逐位操作的?
答案 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(或任何其他草案中,或者如果您有副本,可以在标准本身中)查看血淋淋的详细信息。