关于int类型表示的最大位数

Posted FPCING

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于int类型表示的最大位数相关的知识,希望对你有一定的参考价值。

Integer 整型是有个范围的,而这个范围是跟平台版本有关的32位(最大值为:2^31 - 1)与64位(最大值为:2^63 - 1)的范围不一致。这时候超出范围的数字会被解释为float类型,所以is_int()函数判断会是false,下面是64位的整数溢出:

$large_number = 9223372036854775807;
var_dump(is_int($large_number));                     // true

$large_number = 9223372036854775808;
var_dump(is_int($large_number));    

根据php官网手册:

整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64 位平台下的最大值通常是大约 9E18,除了 Windows 下 php 7 以前的版本,总是 32 位的。 PHP 不支持无符号的 integer。Integer 值的字长可以用常量 PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量 PHP_INT_MAX 来表示,最小值可以在 PHP 7.0.0 及以后的版本中用常量 PHP_INT_MIN 表示。

所以对于32位的integer,有符号2^31=2147483648(约20亿),是一个10位数,所以针对你说的情况,超过9位数会返回false是存在的.

 

所以,今天我在对手机号进行(int)或者是intval()的时候,发现手机号出现了错误。所以在对更大位数的进行判断的时候使用。。。。额目前使用什么还没查到,希望有知道的朋友留言告诉我。

 

以上是关于关于int类型表示的最大位数的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer——打印从1到最大的n位数

关于数据类型的取值范围的理解

C语言里,关于数据类型的大小问题

12:打印 1 到最大的 n 位数

关于int 跟unsigned int 取值 范围

在C语言中,int类型存储的最大的数是2^32,为啥?为啥不是2^31