【发布时间】:2011-08-27 11:34:35
【问题描述】:
我有一个这样的测试程序:
int main()
{
unsigned n = 32;
printf("ans << 32 = 0x%X\n", (~0x0U) << 32);
printf("ans >> 32 = 0x%X\n", (~0x0U) >> 32);
printf("ans << n(32) = 0x%X\n", (~0x0U) << n);
printf("ans >> n(32) = 0x%X\n", (~0x0U) >> n);
return 0;
}
它产生以下输出:
ans << 32 = 0x0 ... (1)
ans >> 32 = 0x0 ... (2)
ans << n(32) = 0xFFFFFFFF ... (3)
ans >> n(32) = 0xFFFFFFFF ... (4)
我期望 (1) 和 (3) 相同,以及 (2) 和 (4) 相同。
使用 gcc 版本:gcc.real (Ubuntu 4.4.1-4ubuntu9) 4.4.1
发生了什么?
【问题讨论】:
-
FWIW:ideone.com/RqWE9