小编cau*_*xic的帖子

比特移位时的奇怪行为

为什么下面用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;
}
Run Code Online (Sandbox Code Playgroud)

编辑: 在此输入图像描述

编辑2:是的,编译器警告我.但这不是重点.我使用0xffffffff作为掩码,我用变量进行bithift.例如,当我使用8进行bithift时,我想要0xffffff(并且它会这样做).当我用31进行bithift时,我希望得到0x1(并且它会这样做).当我用32进行bithift时,它给了我0xffffffff(而不是0,当我有32作为文字,而不是变量时,这是beahaviour).这很奇怪,为了我的目的,为32创建一个特殊情况真的不方便,因为它应该给0(它确实如此,但只有当32是文字时)

c bit-manipulation

5
推荐指数
1
解决办法
393
查看次数

标签 统计

bit-manipulation ×1

c ×1