PHP:在32位系统上INT_MAX显示错误?

Joh*_*ohn 1 php compatibility hex overflow

我只是希望测试整数上的溢出,例如在C中(好吧,如果它刚好超过整数最大值).当我查看PHP是否实际上正在执行我告诉它的操作时,它似乎因某些原因而失败.以下是我对问题的测试:

define('INT_MAX', 0x7FFFFFFF);
print "In decimal: " . hexdec(INT_MAX) . "<br/>";
print "In decimal: " . hexdec(0x7FFFFFFE) . "<br/>"; //Under int_max
print "In hex: " . dechex(hexdec(INT_MAX)) . "<br/>";
print "Float: " . ((bool)is_float(INT_MAX)?'true':'false') . "<br/>";
Run Code Online (Sandbox Code Playgroud)

结果是:

小数:142929835591
十进制:142929835590
十六进制:47483647
浮点数:false

正如我在手册中看到的那样,如果被推翻它将会浮动,但它似乎没有并且显然更高.我是疯了还是在这里遗漏了什么,或者在PHP中使用十六进制时我真的需要知道一些奇怪的问题吗?

Mat*_*hew 5

你的程序是没有意义的,因为你正在服用的0x7FFFFFFF2147483647,再处理它像0x2147483647,这是142929835591十进制.

无论如何,PHP已经有一个你可以使用的常量:

var_dump(PHP_INT_MAX + 1); // converted to float
Run Code Online (Sandbox Code Playgroud)