我写了以下c代码:
#include <stdio.h>
int main () {
printf("%d\n", -1 >> 8);
return 0;
}
我使用 -m32 标志在我的 x86_64 上使用 gcc 4.6.3 编译此代码。正如我所料,我得到 -1 打印出来,移位发生在算术上,使用二进制补码表示导致 -1。
现在,如果我改为写
printf("%d\n", 0xFFFFFFFF >> 8);
我得到 16777215。我本来希望这个常量被解释为一个 int(有符号),然后转换为算术,这将再次导致 -1。我查看了最新的 C 标准,但我似乎无法理解为什么会这样。有任何想法吗?