3
你好
爲什麼從這個功能既號碼印一樣的嗎?這不是一個循環的轉變。
unsigned int i=0x89878685;
int main()
{
printf("0x%x\n", i);
printf("0x%x\n", i>>32);
}
$ ./a.out
0x89878685
0x89878685
是否所有編譯器都以這種方式工作?
你好
爲什麼從這個功能既號碼印一樣的嗎?這不是一個循環的轉變。
unsigned int i=0x89878685;
int main()
{
printf("0x%x\n", i);
printf("0x%x\n", i>>32);
}
$ ./a.out
0x89878685
0x89878685
是否所有編譯器都以這種方式工作?
將32位整數移位32位是未定義的行爲。結果是不可預測的。
在C和C++中,如果整數具有N
位,則只允許將位移小於N
位。如果您轉移N
或更多,則行爲未定義。實際上,當移位32位整數時,某些平臺將簡單地將移位計數解釋爲5位值(丟棄位於下5之上的任何位),這意味着32
將被解釋爲與0
相同的方式。這顯然是在你的平臺上發生的。該值完全沒有移位。
但在這種情況下主要編譯器是什麼? – osgx 2011-04-13 14:59:25
@osgx:他們無論他們想要什麼,行爲是** undefined **。 – 2011-04-13 15:00:30
但他們通常想要什麼? – osgx 2011-04-13 15:00:58