2011-03-11 20 views
2

從我所知道的整數範圍是32,768到32,767。 長整數的範圍是2,147,483,648到2,147,483,647。 我doubledchecked wikipedeia來確保。C:爲什麼整數作爲長整數?

的現在問題:

int a=2147483647; 
printf("a: %d\n", a); 

爲什麼這項工作?如果我將1加到2147483647那麼它會打印垃圾,如果變量是一個長整數,則會出現一些垃圾。但爲什麼它允許我首先將一個長整數分配給一個整數?

+0

你檢查哪個維基百科條目? 32位機器上的整數應該落在-2b到+ 2b的範圍內。 – 2011-03-11 00:32:54

+0

http://en.wikipedia.org/wiki/Integer_%28computer_science%29雖然我可能讀錯了。我有這樣的想法,有什麼大小的int,long int,float應該是一個標準。但是,這並不意味着一個程序在不同的處理器上可能會有很大的不同。有人會如何照顧這個程序員? – Pithikos 2011-03-11 01:03:51

回答

11

從我所知道的整數範圍是32,768到32,767。

這是不正確的。 int的範圍至少爲-32,767至32,767;它可能有更大的範圍,並且在大多數32位和64位平臺上都有。

您可以通過檢查<limits.h>定義的INT_MAXINT_MIN宏找出int型平臺上的範圍。

+1

+1,儘管實際上它的範圍至少爲+/- 32767,不一定包括-32768,以允許其他有符號表示愚蠢。 – 2011-03-11 00:33:16

+0

@Steve:是的;我只是看着那個,因爲我認爲它必須支持有限的幅度,-32,768到32,767不會。謝謝。 – 2011-03-11 00:34:40

4

int的實際寬度通常取決於實現。您可以使用limits.h標題中的INT_MAX/INT_MIN常量來找出實際範圍。

在x86機器上,int通常是4個字節,所以2^31-1的確是它的最大值。

+0

「對於x> = 3的值,在x86機器上,int是......」。對於'286,'186和'086,「int」通常是2個字節。但是,除非OP有超過20年的計算機,否則您的陳述是正確的。 – 2011-03-11 03:27:23

5

你知道什麼是錯的。

與Java等一些其他語言不同,C中的intlong的確切大小是實現定義的(具有設置的限制)。顯然,你使用的平臺是32位寬,但在其他平臺上它可能是16位,並且在某些平臺上,它是64位寬。

同樣,在一些平臺上,long是32位寬;在別人身上它是64位寬。如果一個平臺選擇這樣做,它可能會更廣泛。

3

的sizeof(短)< =的sizeof(int)的< =的sizeof(長)

相關問題