我有一個這樣的測試程序:意外行爲使用gcc
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:http://ideone.com/RqWE9 –