PHP 中 int 的最大值是多少?

What's the maximum value for an int in PHP?

提问人:nickf 提问时间:3/22/2009 最后编辑:PHPLovernickf 更新时间:6/29/2019 访问量:156611

问:

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

PHP 整数

评论


答:

7赞 nickf 3/22/2009 #1

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

https://www.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)

评论

8赞 thomasrutter 5/16/2010
这就是在 32 位平台上的样子。还要考虑到许多人在 64 位平台上运行服务器。
24赞 cletus 3/22/2009 #2

PHP ints 的大小取决于平台

整数的大小为 取决于平台,尽管最大值 价值约20亿是 常用值(即 32 位有符号)。 PHP 不支持无符号 整数。整数大小可以是 使用常量确定 PHP_INT_SIZE,最大值使用 自 PHP 以来的恒定PHP_INT_MAX 4.4.0 和 PHP 5.0.5。

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

评论

2赞 nickf 3/22/2009
我没有得到这些反对票..这是一个很好的答案,即使有一些额外的信息。+1 更正它。
3赞 thomasrutter 12/7/2016
这个答案原文是“依赖平台”(不是依赖)。它还(仍然)声称 64 位整数在 PHP 6 之前并不存在。这是错误的。
1赞 BadHorsie 6/2/2020
PHP 6 从未发生过,所以它有点无关紧要。
0赞 thomasrutter 7/15/2022
无论 PHP 6 是否发生,这个答案都声称早期版本的 PHP 没有 64 位整数,甚至暗示 PHP 版本具有称为“long”的数据类型——两者都不正确。
2赞 user57365 3/22/2009 #3

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

评论

6赞 thomasrutter 5/16/2010
具体来说,这取决于您是在 32 位平台上运行还是在 64 位平台上运行。在大多数人运行 32 位服务器的世界中,32 位只是“通常”的。这种情况越来越严重。
152赞 karim79 3/22/2009 #4

PHP手册中:

整数的大小为 取决于平台,尽管最大值 价值约20亿是 常用值(即 32 位有符号)。 PHP 不支持无符号 整数。整数大小可以是 使用常量确定 PHP_INT_SIZE,最大值使用 自 PHP 以来的恒定PHP_INT_MAX 4.4.0 和 PHP 5.0.5。

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

评论

15赞 derobert 3/22/2009
好吧,在现在很常见的 amd64 linux 上,它的9223372036854775807 (2^63-1)
4赞 karim79 3/22/2009
这是很多数字 - 这是我能想到的第一个原因,在购买专用服务器时选择AMD而不是Intel。:)
41赞 strager 3/22/2009
@karim79,我认为这是由于 arch 是 64 位,而不是 AMD。=]
9赞 thomasrutter 5/16/2010
AMD64 是当今 AMD 和 Intel 使用的 64 位架构的一个名称。它的其他名称包括 x64 和 Intel 64。正如 strager 所说,与它是 AMD 无关
4赞 Vova Popov 3/20/2012
我的 Windows XAMPP 回声2147483647。我有AMD Athlon X2
105赞 thomasrutter 5/16/2010 #5

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 本身不支持“无符号”整数,将所有整数的最大值限制在“有符号”整数的范围内。

评论

1赞 thomasrutter 7/31/2018
有趣的是,在 32 位构建中,浮点数可以将整数精度保持在比 ints 更高的值 - floats 可用于高达 2^53 + 1 的整数值,明显高于 ints 的 2^31 - 1。在 64 位构建中,这是相反的,因为浮点数的精度相同,但 int 现在高达 2^63 - 1。
0赞 Stijn de Witt 9/5/2022
> PHP 本身不支持“无符号”整数这意味着 an 的最大值不能在 PHP 中用 表示,无论是 32 位还是 64 位。此外,Javascript 可以表示 53 位的最大整数值,因为该语言将浮点数和整数组合在一个类型中。因此,在设计架构时,考虑到大多数系统上可以表示的最大整数值是有符号的 53 位,而不是(有符号或无符号的)64 位,这是有意义的。unsigned longintnumbernumber
0赞 Stijn de Witt 9/5/2022
我认为 Javascript 在这里是相关的,因为限制会渗入 JSON,它也不能表示大于 53 位的整数值。number
0赞 thomasrutter 9/6/2022
这种 53 位的重要性来自IEEE754这也是处理器内置浮点数的标准。
0赞 Stijn de Witt 9/6/2022
是的,只是许多语言定义了特定的整数类型,这些类型不在内部存储为双精度浮点数。这为这些语言提供了 64 位整数。例如,Java 有 ,它是一个有符号的 64 位整数。C 具有 ,在 64 位体系结构上,它为您提供一个无符号的 64 位整数。这意味着在 Java 和 C 中,您可以创建比 Javascript 中可以用 a 表示的整数值高得多的整数值。例如,在创建 JSON API 时,这一点很重要。longunsigned long longnumber
18赞 Julien CROUZET 12/29/2010 #6

(有点晚了,但可能有用)

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

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

1赞 revo 3/16/2019 #7

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

$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;
2赞 Soner from The Ottoman Empire 6/29/2019 #8

它受制于运行PHP的服务器的体系结构。对于 64 位,

print PHP_INT_MIN . ", ” . PHP_INT_MAX;收益 率-9223372036854775808, 9223372036854775807