2013-10-10 82 views
-5
整數移位
main() 
{ 
    int i=-1,j=32,k; 
    k=i<<j; 
    printf("i=%d j=%d k=%d\n",i,j,k); 
} 

輸出:按位左超過31倍

i=-1 j=32,k=-1 

如果我正在J = 33然後k=-2和如果j = 34則k = -4.its後32次重複左移,即如果j = 64,則k變爲-1,並且如果j = 65,則k = -2。但邏輯位應該丟失,即輸出爲0.這裏發生了什麼。

對不起,提出這樣的問題。我是初學者,所以我無法理解編譯器在這裏做什麼。你可以解釋嗎?

+0

我看到的典型行爲(儘管不是標準化的)是它導致模32的移位。 –

回答

0

當將值移位等於或大於其大小時,您無法指望獲得有意義的結果。從標準:

如果右操作數的值是負的或大於或 等於推動左操作數的寬度,該行爲是 未定義。