我只是給K & R C書第2章學習,比方說,我有這樣的代碼:爲什麼〜0 >> 1不移位?
#include <stdio.h>
int
main(void)
{
printf("0x%016llx\n", ~0); //0x00000000ffffffff
printf("0x%016llx\n", ~0 >> 1); //0x00000000ffffffff
printf("0x%016llx\n", 0x00000000ffffffff >> 1); //0x000000007fffffff
return 0;
}
我希望~0 >> 1
會給0x000000007fffffff
怎麼樣0x00000000ffffffff >> 1
做的,這~0
有0x00000000ffffffff
值。
爲什麼~0 >> 1
不移位?
您的代碼調用未定義的行爲,因此所有可能的結果都是同樣有效的。要修復UB,請將'llx'更改爲'x'。然後,爲了得到你想要的行爲,把'〜0'改成'〜0u'。 –
@Robᵩ - 很好的評論。應該是一個答案。 – ryyker
@林果皞:您的平臺上的'〜0'不是'0x00000000ffffffff',因爲您錯誤地認爲。它只是'0xffffffff'。 – AnT