将32位整数移位32位

Bra*_*don 4 c bits bit-shift low-level

我正在抛出一些C代码,我需要将32位int 32位移位.当我使用参数n = 0运行此代码时,不会发生移位.

int x = 0xFFFFFFFF;
int y = x << (32 - n);
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

Who*_*aig 10

转移自己的危险.根据标准,您要做的是未定义的行为.

C99§6.5.7

3 - 对每个操作数执行整数提升.结果的类型是提升的左操作数的类型.如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为未定义.

换句话说,如果您尝试将32位值移动超过31位或负数,则结果是未定义的.