代码之家  ›  专栏  ›  技术社区  ›  Christian Ammer

为什么数值限制<int>::min()的定义不同?

  •  4
  • Christian Ammer  · 技术社区  · 14 年前

    numeric_limits<int>::min()

    我假设最小的int是-2147483648,在我的机器上的测试显示了这个结果。 但有些C++参考文献 Open Group Base Specifications cplusplus.com 用值-2147483647定义它。

    我问这个问题是因为在我实现negaMax框架(游戏树搜索)时 价值 最小整数 最小整数 =(数值限制::min()+2)我在任何情况下都是安全的,

    5 回复  |  直到 14 年前
        1
  •  4
  •   user261840    14 年前

    如果一个值被表示为符号和大小而不是2的补码,那么符号位为1,其他位为0等于-0。在符号和大小中,最大正整数和负整数的大小是相同的。2的补码可以表示一个负值,因为它没有相同的对称性。

        2
  •  3
  •   Kirill V. Lyadvinsky    14 年前

    numeric_limits<int>::min() 由实现定义。这就是为什么会不同。你不应该坚持任何具体的最小值。

        3
  •  1
  •   KitsuneYMG    14 年前

    • 这不一定是任何特定编译器或系统中常量的实际值,它的大小可能等于或大于此值。
        4
  •  0
  •   Adam W    14 年前

    下面的面板显示了不同的常量及其值 保证最小震级 (正数的值可能更大,负数的值可能更小)。

    数值限制总是由系统和编译器定义的,尝试使用64位编译器和系统运行,您可能会看到完全不同的数字。

        5
  •  0
  •   tzenes    14 年前

    C++对符号整数使用两个加法。因此,最小有符号整数由 100..00

    简单的移动 1<<(sizeof(int)*8-1) 应该给你最小的有符号整数。

    显然,对于无符号整数,最小值是0。

    编辑:你可以阅读更多 here
    Edg2:显然C++不一定使用两个恭维,我的错误