PHP 中 int 类型取值范围
我们知道 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类型。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论