簡體   English   中英

為什么numeric_limits <int> :: min()的定義不同?

[英]Why numeric_limits<int>::min() is differently defined?

要檢索最小值,我必須使用numeric_limits<int>::min()

我想最小的int是-2147483648,我的機器上的測試顯示了這個結果。 但是一些C ++引用如Open Group Base Specificationscplusplus.com定義它的值為-2147483647。

我問這個問題,因為在我的negaMax框架(游戲樹搜索)的實現中,必須很好地定義值最小整數 *( - 1)。 是的, 最小的int =(numeric_limits :: min()+ 2)在任何情況下我都是安全的,因此我的問題在理論上更為正確但我認為非常有趣。

如果一個值表示為符號和幅度而不是二進制補碼,則符號位為1,其他所有位為零等於-0。 在符號和幅度中,最大正整數和負整數具有相同的幅度。 二進制補碼能夠代表另一個負值,因為它沒有相同的對稱性。

numeric_limits<int>::min()值由實現定義。 這就是為什么它可能會有所不同。 你不應該堅持任何具體的最低價值。

在cplusplus.com上你忘了閱讀限定符

分鍾。 大小*

  • 這不一定是任何特定編譯器或系統中常量的實際值,它的大小可能等於或大於此值。

從您發布的cplusplus.com鏈接(強調我的):

下面的面板顯示了不同的常數及其保證的最小量值 (正數值可能更大,負數值可能更小)。 任何特定的編譯器實現都可以定義比這里顯示的更大幅度的整數類型

數字限制始終是系統和編譯器定義的,嘗試使用64位編譯器和系統運行,您可能會看到完全不同的數字。

c ++對有符號整數使用二進制補碼。 因此,最小的有符號整數由 100..00 (通常為32位)定義。

簡單地移動1<<(sizeof(int)*8-1)應該給出最小的有符號整數。

顯然,對於無符號整數,最小值為0。

編輯:你可以在這里閱讀更多
edit2:顯然C ++並不一定使用二維恭維,我的錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM