<分区>
为什么以下使用 gcc 编译的代码打印出“ffffffff 0”而不是“0 0”?在两条指令中,这些位都向右移动了 32 个位置。这没有多大意义,因为 x == 32,但仍然会发生这种奇怪的结果......
#include <stdio.h>
int main(void)
{
int x = 32;
printf("%x\n", 0xffffffff >> x);
printf("%x\n", 0xffffffff >> 32);
return 0;
}
编辑2: 是的,编译器警告我。但这不是重点。我使用 0xffffffff 作为掩码,我用一个变量进行位移。例如,当我用 8 进行位移时,我想要 0xffffff(它就是这样做的)。当我用 31 进行位移时,我想要 0x1 作为结果(它就是这样做的)。当我用 32 进行位移时,它会给我 0xffffffff(而不是 0,这是当我将 32 作为文字而不是变量时的行为)。这很奇怪,为了我的目的,为 32 做一个特例真的很不方便,因为它应该给出 0(它确实给出了,但只有当 32 是一个字面值时)