【问题标题】:What's the maximum value for an int in PHP?PHP中int的最大值是多少?
【发布时间】:2010-10-14 19:33:04
【问题描述】:

忽略允许您处理非常大的数字的特殊库,您可以在 PHP 中存储的最大 int 值是多少?

【问题讨论】:

    标签: php integer


    【解决方案1】:

    来自PHP manual

    整数的大小是 平台相关,虽然最大 价值约 20 亿 通常的值(即 32 位有符号)。 PHP 不支持无符号 整数。整数大小可以 使用常数确定 PHP_INT_SIZE,最大值使用 自 PHP 以来的常量 PHP_INT_MAX 4.4.0 和 PHP 5.0.5。

    64 位平台的最大值通常约为 9E18,除了在 PHP 7 之前的 Windows 上,它始终是 32 位。

    【讨论】:

    • 嗯,在 amd64 linux 上,现在很常见,它的 9223372036854775807 (2^63-1)
    • 数字太多了——这是我在购买专用服务器时能想到的第一个选择 AMD 而不是 Intel 的原因。 :)
    • @karim79,我认为这是由于拱门是 64 位的,而不是 AMD。 =]
    • AMD64 是当今 AMD 和 Intel 使用的 64 位架构之一。它的其他名称包括 x64 和 Intel 64。正如 strager 所说,它与 AMD 无关
    • 我的 windows XAMPP echo 的 2147483647 。我有 AMD Athlon X2
    【解决方案2】:

    PHP 的 32 位版本:

    • 整数可以从 -2,147,483,6482,147,483,647(~ ± 20 亿)

    PHP 的 64 位版本:

    • 整数可以从 -9,223,372,036,854,775,8089,223,372,036,854,775,807(~ ± 9 quintillion)

    数字包括在内。

    注意:一些 64 位构建曾经使用 32 位整数,尤其是 PHP 的旧 Windows 构建

    这些范围之外的值由浮点值表示,这些范围内的非整数值也是如此。解释器将根据计算的结果值是否不能表示为整数,自动确定何时需要切换到浮点数。

    PHP 本身不支持“无符号”整数,将所有整数的最大值限制在“有符号”整数的范围内。

    【讨论】:

    • 有趣的是,在 32 位构建中,floats 可以将整数精度保持到比 ints 更高的值 - 浮点数可用于高达 2^53 + 1 的整数值,明显更高比 2^31 - 1 的整数。在 64 位版本中,这是相反的,因为浮点数具有相同的精度,但整数现在高达 2^63 - 1。
    【解决方案3】:

    PHP int 的大小为platform dependent:

    整数的大小是 平台相关,虽然最大 价值约 20 亿 通常的值(即 32 位有符号)。 PHP 不支持无符号 整数。整数大小可以 使用常数确定 PHP_INT_SIZE,最大值使用 自 PHP 以来的常量 PHP_INT_MAX 4.4.0 和 PHP 5.0.5。

    PHP 6 添加了“longs”(64 位整数)。

    【讨论】:

    • 我没有得到这些反对意见。这是一个非常好的答案,即使添加了一些额外的信息。+1 来纠正它。
    • 这个答案最初是“平台in依赖”(不依赖)。它还(仍然)声称在 PHP 6 之前不存在 64 位整数。这是错误的。
    • PHP 6 从未发生过,所以它有点无关紧要。
    • PHP 4 和 5 现在真的已经过时了,所以这是一个有争议的问题,但关键是 PHP 4 和 5 也有 64 位整数 - 这不是 PHP 6 中添加的东西,也不是任何 PHP 版本都有一种称为“long”的整数类型。整数类型只是依赖于平台。
    【解决方案4】:

    (有点晚,但可能有用)

    仅信任 PHP_INT_MAX and PHP_INT_SIZE,此值因您的架构(32/64 位)和您的操作系统而异...

    任何其他“猜测”或“提示”都可能是错误的。

    【讨论】:

      【解决方案5】:

      啊,我找到了:232 - 1 (2147483647)

      http://au2.php.net/int

      整数溢出

      如果 PHP 遇到超出整数类型范围的数字,它将被解释为浮点数。此外,导致数字超出整数类型范围的操作将改为返回浮点数。

      <?php
      $large_number =  2147483647;
      var_dump($large_number);
      // output: int(2147483647)
      
      $large_number =  2147483648;
      var_dump($large_number);
      // output: float(2147483648)
      

      【讨论】:

      • 这就是它在 32 位平台上的样子。还要考虑许多人在 64 位平台上运行服务器。
      【解决方案6】:

      这取决于您的操作系统,但根据manual,2147483647 是通常的值。

      【讨论】:

      • 具体看你是运行在32位平台还是64位平台。在大多数人运行 32 位服务器的世界中,32 位只是“常见的”。越来越多的情况并非如此。
      【解决方案7】:

      它取决于运行 PHP 的服务器的架构。对于 64 位,

      print PHP_INT_MIN . ", ” . PHP_INT_MAX; 产生-9223372036854775808, 9223372036854775807

      【讨论】:

        【解决方案8】:

        虽然PHP_INT_* 常量存在很长时间,但可以通过左移直到达到负数以编程方式找到相同的 MIN / MAX 值:

        $x = 1;
        while ($x > 0 && $x <<= 1);
        echo "MIN: ", $x;
        echo PHP_EOL;
        echo "MAX: ", ~$x;
        

        【讨论】:

          猜你喜欢
          • 2012-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-25
          • 2023-03-13
          • 1970-01-01
          • 2015-05-21
          • 2011-06-15
          相关资源
          最近更新 更多