Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP intval()更改的数字不是2147483647_Php_32 Bit - Fatal编程技术网

PHP intval()更改的数字不是2147483647

PHP intval()更改的数字不是2147483647,php,32-bit,Php,32 Bit,我正在运行PHP5.3.13,当我执行 php -r "echo intval(9999999999);" php -r "echo intval(PHP_INT_MAX);" 它输出1410065407 当我执行 php -r "echo intval(9999999999);" php -r "echo intval(PHP_INT_MAX);" 它的产出为2147483647 较小的整数导致我的代码出现一些问题。为什么不同 您的号码太大,导致溢出。PHP整数是无符号32位整数。如果

我正在运行PHP5.3.13,当我执行

php -r "echo intval(9999999999);"
php -r "echo intval(PHP_INT_MAX);"
它输出1410065407

当我执行

php -r "echo intval(9999999999);"
php -r "echo intval(PHP_INT_MAX);"
它的产出为2147483647


较小的整数导致我的代码出现一些问题。为什么不同

您的号码太大,导致溢出。PHP整数是无符号32位整数。如果你想处理大量的数据,你可以看看


前两个被移除。然后得到1410065407(基数10)

在您的例子中,值
9999999999
被存储为
浮点值。您可以使用
var\u dump(9999999999)
验证这一点。当它被强制转换为有符号整数时,该值被截断为32位,从而得到值
1410065407

您可以手动或使用GMP数学扩展验证此计算:

$num = gmp_init("9999999999");
$bits = gmp_pow(2, 32);

var_dump(gmp_strval(gmp_mod($num, $bits)));
// string(10) "1410065407"

整数99999999的二进制表示形式为:

0010 0101 0100 0000 1011 1110 0011 1111 1111
这意味着您需要更多的32位来表示该数字。如果您使用的是32位体系结构,则该数字将被截断为

0101 0100 0000 1011 1110 0011 1111 1111

表示整数1410065407,即函数返回的值。希望这有帮助,快乐编码。

如果在DB-2147483647中工作是mysql中整数的最大值,则将
int
更改为
bigint
。您回答了自己的问题:它不能表示99999999999,因为它比PHP_int_MAX大….可能重复@Boann,我想问题是打印的数字不等于整数
PHP\u INT\u MAX
value.ahhh,这很有道理。我能接受的时候就接受。谢谢你清楚的回答,请解释你的计算。因为
(999999999%2147483647)
对我来说是
1410065411
99999999=4*2147483647+1410065411
。但是:
(9999999999&2147483647)=1410065407
那么你应该编辑你的答案,因为
PHP\u INT\u MAX
在32位系统上实际上是
2147483647
。所以计算是错误的(而且无论如何在32位系统上也不可能解决)@BreyndotEchse-你完全正确。这不是模数
PHP\u INT\u MAX
,而是模数
2^32
。模数
PHP\u INT\u MAX
忽略~
2^31
负有效整数值。我已经更新了我的答案。