PHP 中 int 类型取值范围

发布于 2021-07-27 12:30:04 字数 691 浏览 1673 评论 0

我们知道 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文