2016-09-05 36 views
-5

所以我覺得我有點困惑。我正在搜索關於不同類型整數的限制的信息。我見過的unsigned long int類型的限制是4294967295,但是當我這樣做:C++整數限制

cout << numeric_limits<unsigned long int>::max() << endl; 

我越來越:

18446744073709551615 

而且如果我沒看錯這個數字的極限無符號long long,不是嗎?那麼發生了什麼? 謝謝

+1

「發生了什麼?「你正在執行的代碼給你你要求的結果,你應該檢查文檔 – ray

+1

基本類型的限制是依賴於實現的,這意味着它取決於你的編譯器(或者編譯器的人)實際的限制是(這可能取決於各種因素,包括代碼要運行的硬件) – UnholySheep

+0

@UnholySheep好的,謝謝 – xampla

回答

2

我見過的unsigned long int類型的限制爲4294967295

誰告訴你,這是錯誤的

unsigned long int限通常是上的量,類型是32位的系統。

但是你的顯然是64位,所以你有不同的限制。

這個數字是無符號long long的極限,isn'it?

同樣,你正在做有關類型寬度假設。

類型的寬度因編譯器/平臺而異。

如果你想使用的類型有固定的大小,然後those do exist

+0

我知道我錯過了一些東西,謝謝。 – xampla

1

該標準僅定義了整數限制的下限。例如,unsigned long可表示的最大下限爲4294967295

std::numeric_limits<unsigned long>::max()給出了實現定義的最大值和unsigned long可以表示的(即當前實現aka編譯器/鏈接器/實際支持的)。

這意味着要求 std::numeric_limits<unsigned long>::max()給出的值爲4294967295或更多。沒有什麼能阻止它給出更大的結果。但是,實現較小結果的實現不符合標準。

需要注意的是,編譯器之間移動時,唯一的保證是「4294967295以上」。如果一個實現提供了更大的價值,那麼不能保證另一個實現會實現。

在大多數情況下,標準其實兩手空空約用來表示基本整型,像unsigned long實際的位數說。

18446744073709551615是具有64位unsigned long一致,在實踐中。

類似的故事,儘管有不同的價值觀,對於其他整型(intcharshortlong等)。