php int max min - yaokun123/php-wiki GitHub Wiki

我们知道64位的整数的表值范围是-9223372036854775808 到 9223372036854775807.

在64位系统上PHP内部是使用有符号的64位整形来表示IS_LONG, 分别有俩个常量来表示这俩个值, 分别是PHP_INT_MIN和PHP_INT_MAX.

php -r "echo PHP_INT_MAX;"//9223372036854775807

php -r "echo PHP_INT_MIN;"//-9223372036854775808

php -r "echo 9223372036854775807;"//9223372036854775807

php -r "echo -9223372036854775808;"//-9.2233720368548E+18

为什么PHP在echo -9223372036854775808;的时候变成了浮点型了呢?

在PHP编译器处理输入文件输入的时候,对于负数字面量它的处理方式是:首先把负号后面的数字作为一个整形接受进来,然后在把它求负。

于是这就造成了这个问题, 开头我们说了64位的最大正表值是9223372036854775807,那当PHP处理-9223372036854775808的时候, 9223372036854775808 超出了64位整形的最大正表值范围,PHP没有办法用一个有符号64位整形存储它,于是只能把它自动转成了DOUBLE类型。