我在一個函數上調用此代碼,以便將有符號整數n設置爲零,但行爲奇怪。兩條等價線評估不同的結果[bit-shifting]
printf("n is %d \n", n);
printf("shift1 %d \n", -1 << (32 + (~0 + 1)));
printf("shift2 %d \n", -1 << (32 + (~n + 1)));
打印
n is 0
shift1 0
shift2 -2
我不知道爲什麼會這樣,由於n == 0
'n'是什麼類型? – cdhowie 2014-09-10 23:04:13
@cdhowie n是一個有符號整數。 – Miles 2014-09-10 23:04:56
注意左移一個負整數是未定義的行爲,所以在技術上這個輸出是C規範允許的。我們可以推斷它在你的特定編譯器上的行爲,但我們不能推斷它將如何表現,因此我們不能提供答案。 – cdhowie 2014-09-10 23:05:43