所以我覺得我有點困惑。我正在搜索關於不同類型整數的限制的信息。我見過的unsigned long int類型的限制是4294967295,但是當我這樣做:C++整數限制
cout << numeric_limits<unsigned long int>::max() << endl;
我越來越:
18446744073709551615
而且如果我沒看錯這個數字的極限無符號long long,不是嗎?那麼發生了什麼? 謝謝
所以我覺得我有點困惑。我正在搜索關於不同類型整數的限制的信息。我見過的unsigned long int類型的限制是4294967295,但是當我這樣做:C++整數限制
cout << numeric_limits<unsigned long int>::max() << endl;
我越來越:
18446744073709551615
而且如果我沒看錯這個數字的極限無符號long long,不是嗎?那麼發生了什麼? 謝謝
我見過的unsigned long int類型的限制爲4294967295
誰告訴你,這是錯誤的。
爲unsigned long int
限通常是上的量,類型是32位的系統。
但是你的顯然是64位,所以你有不同的限制。
這個數字是無符號long long的極限,isn'it?
同樣,你正在做有關類型寬度假設。
類型的寬度因編譯器/平臺而異。
如果你想使用的類型有固定的大小,然後those do exist。
我知道我錯過了一些東西,謝謝。 – xampla
該標準僅定義了整數限制的下限。例如,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
一致,在實踐中。
類似的故事,儘管有不同的價值觀,對於其他整型(int
,char
,short
,long
等)。
「發生了什麼?「你正在執行的代碼給你你要求的結果,你應該檢查文檔 – ray
基本類型的限制是依賴於實現的,這意味着它取決於你的編譯器(或者編譯器的人)實際的限制是(這可能取決於各種因素,包括代碼要運行的硬件) – UnholySheep
@UnholySheep好的,謝謝 – xampla