2013-08-23 37 views
1

我正在學習C,我讀了Kernighan &裏奇的書中,整數int被包含在一組特定集[-32767; 32767]中。我試圖通過編寫下面的程序來驗證這個斷言,該程序在負數之前將變量計數從1遞增到極限。爲什麼我可以用一個整數來達到這個數字?

#include <stdio.h> 

int main(void){ 
    int count = 1; 
    while(count > 0){ 
     count++; 
     printf("%d\n", count); 
    } 

    return 0; 
} 

令人奇怪的是,我得到這個輸出:

1 
...... 
2147483640 
2147483641 
2147483642 
2147483643 
2147483644 
2147483645 
2147483646 
2147483647 -> This is a lot more than 32767?! 
-2147483648 

我不明白,爲什麼我得到這個輸出?我懷疑M.裏奇犯了一個錯誤;)

+0

你在考慮16位整數。您的編譯器顯然使用32位實現。 – 2013-08-23 01:47:51

+0

[Size of C「int」是2字節還是4字節?](http://stackoverflow.com/questions/11438794/size-of-c-int-is-2-bytes-or-4-字節) –

+0

K&R正在解釋一個整數是*所需要做的。允許做很多事情,這是不需要做的。 –

回答

1

短褲通常從-32768到32767. 2^15th - 1是最大的短褲。

英特斯通常從-2147483648到2147483647. 2^31st -1是最大的int。

基本上整數是你想象的大小的兩倍。

2

您使用的是32位或64位計算機,並且您使用的C編譯器具有32位整數。在2的補碼二進制中,正如您所觀察的那樣,最高的正整數應爲31位,或者2^31-12147483647

請注意,這並不違反K & R的聲明,即整數值包括範圍[-32768; 32767]。

相關問題