2012-02-13 146 views
1

INT_MAX在32位和64位環境中有什麼不同?看起來好像是這樣,儘管我聽說有人說64位環境只是使用32位環境的INT_MAX。int_max在32位和64位環境中

+0

沒有像* a * 32位或64位環境那樣的東西,但是每個這樣的系統都有多個定義。 – 2012-02-13 08:22:14

回答

5

這取決於系統。在英特爾Linux上它們是一樣的。檢查limits.h

+0

有沒有一個很好的資源我可以查看它們在英特爾處理器上的相同方式(以及它們可能會不同?)。謝謝! – Rio 2012-02-13 08:10:38

+0

你通常使用預處理器或使用stdint.h來解釋差異,你究竟在尋找什麼? – Anycorn 2012-02-13 08:14:26

+0

試圖看看'unsigned long long int'下溢出的情況。 – Rio 2012-02-13 08:15:51

0

您的問題可能過於籠統,但在典型的64位環境(x86-64)中,int實際上與386上的大小相同(請記住,這也取決於OS,而不僅僅是體系結構)。 C標準僅限制下限(如wiki所述)。

+0

它如何依賴於操作系統?對不起,如果它看起來如此通用 - 我一直無法在INT_MAX上找到好的資源。 – Rio 2012-02-13 08:07:41

+0

當您在x86-64上獲得32位Linux時,操作系統將使用32位限制(例如ULOG_MAX更改)。 – AoeAoe 2012-02-13 08:16:13

0

對於某些編譯器,與long類型有所不同。也就是說,long在編譯32位時是32位,否則是64位,而int在兩種情況下都是32位。

但是,根據你的需要,如果你想確保你有一個64位int,那麼你的問題的答案可能是int64_t(或者編譯器的等價物,或者是__int64或類似的東西)。

所以你應該澄清你的問題。

+0

如果我使用'unsigned long long int',那麼怎麼樣?在這種情況下,兩種環境下的INT_MAX會有所不同嗎? – Rio 2012-02-13 08:15:15

+0

不,INT_MAX是int的最大值。對於'unsigned long long'的最大值,使用'ULLONG_MAX'。但是不能保證這兩個「環境」之間會有所不同。它可能會有所不同,取決於具體情況(Windows,Linux,哪個編譯器等) – 2012-02-13 08:19:10