Php 在32位服务器上键入强制转换大整数
我有以下代码Php 在32位服务器上键入强制转换大整数,php,Php,我有以下代码 <?php $id=3001957093; //between 1 and 4,294,967,295 echo($id."\n".(int)$id."\n"); 在我的x86_64 Centos PHP版本5.5.24开发物理盒上,int$id与$id相同。但在我的i386 Centos PHP版本5.5.18生产虚拟服务器上,int$id为-1293010203 阅读,我明白了: 整数的大小取决于平台,尽管是最大值 大约20亿是通常的32位有符号值。 64位平台的最大值
<?php
$id=3001957093; //between 1 and 4,294,967,295
echo($id."\n".(int)$id."\n");
在我的x86_64 Centos PHP版本5.5.24开发物理盒上,int$id与$id相同。但在我的i386 Centos PHP版本5.5.18生产虚拟服务器上,int$id为-1293010203
阅读,我明白了:
整数的大小取决于平台,尽管是最大值
大约20亿是通常的32位有符号值。
64位平台的最大值通常约为9E18,但上除外
PHP7之前的Windows,它始终是32位的。PHP没有
支持无符号整数。整数大小可以使用
常量PHP_INT_SIZE,使用常量PHP_INT_MAX的最大值
由于PHP4.4.0和PHP5.0.5,最小值使用常量
自PHP7.0.0以来的PHP_INT_MIN
啊哈,这就解释了
在32位服务器上,如何确保1和4294967295之间的数字是整数
如果转换后的值为-1293010203,我如何判断原始数字是什么,即3001957093?如果它不适合整数,则不能使用整数。句点。@KarolyHorvath is_int将不起作用,因为该数字将被转换为浮点。给定转换后的浮点值,可以确定原始值吗?@user1032531不可靠。在64位上,9.2233720368548E+18==9.2233720368548E+18+1为真。