【发布时间】:2010-10-14 19:33:04
【问题描述】:
忽略允许您处理非常大的数字的特殊库,您可以在 PHP 中存储的最大 int 值是多少?
【问题讨论】:
忽略允许您处理非常大的数字的特殊库,您可以在 PHP 中存储的最大 int 值是多少?
【问题讨论】:
来自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 位。
【讨论】:
PHP 的 32 位版本:
PHP 的 64 位版本:
数字包括在内。
注意:一些 64 位构建曾经使用 32 位整数,尤其是 PHP 的旧 Windows 构建
这些范围之外的值由浮点值表示,这些范围内的非整数值也是如此。解释器将根据计算的结果值是否不能表示为整数,自动确定何时需要切换到浮点数。
PHP 本身不支持“无符号”整数,将所有整数的最大值限制在“有符号”整数的范围内。
【讨论】:
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 位整数)。
【讨论】:
【讨论】:
啊,我找到了:232 - 1 (2147483647)
整数溢出
如果 PHP 遇到超出整数类型范围的数字,它将被解释为浮点数。此外,导致数字超出整数类型范围的操作将改为返回浮点数。
<?php
$large_number = 2147483647;
var_dump($large_number);
// output: int(2147483647)
$large_number = 2147483648;
var_dump($large_number);
// output: float(2147483648)
【讨论】:
这取决于您的操作系统,但根据manual,2147483647 是通常的值。
【讨论】:
它取决于运行 PHP 的服务器的架构。对于 64 位,
print PHP_INT_MIN . ", ” . PHP_INT_MAX; 产生-9223372036854775808, 9223372036854775807
【讨论】:
虽然PHP_INT_* 常量存在很长时间,但可以通过左移直到达到负数以编程方式找到相同的 MIN / MAX 值:
$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;
【讨论】: