我有以下代码。
<?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
。
阅读http://php.net/manual/en/language.types.integer.php,我看到了:
整数的大小取决于平台,尽管是最大值 大约20亿是通常的值(32位签名)。 64位平台的最大值通常约为9E18,除了 Windows 7之前的Windows,总是32位。 PHP没有 支持无符号整数。整数大小可以使用 常量PHP_INT_SIZE,使用常量PHP_INT_MAX的最大值 自PHP 4.4.0和PHP 5.0.5以来,使用常量的最小值 自PHP 7.0.0以来的PHP_INT_MIN。
啊哈,这解释了它!
在32位服务器上,如何确保1到4,294,967,295之间的数字是整数?
如何根据转换后的价值(即-1293010203)判断原始数字(即3001957093)是什么?