我只是希望测试整数上的溢出,例如在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/>";
结果是:
十进制:142929835591
小数:142929835590
十六进制:47483647
浮动:假
正如我在手册中看到的那样,如果被推翻它将会浮动,但它似乎没有并且显然更高。我是疯了还是在这里遗漏了什么,或者在PHP中使用十六进制时我真的需要知道一些奇怪的问题吗?
答案 0 :(得分:5)
您的计划毫无意义,因为您正在使用0x7FFFFFFF
2147483647
,然后将其视为0x2147483647
,即十进制142929835591
。
无论如何,PHP已经有了一个你可以使用的常量:
var_dump(PHP_INT_MAX + 1); // converted to float
答案 1 :(得分:1)
define('INT_MAX', 0x7FFFFFFF);
这将INT_MAX
定义为整数2147483647
。没有必要将其解释为十六进制数。如果您确实希望将INT_MAX
用作文字十六进制值,则需要将其声明为'7FFFFFFF'
(在字符串内);然后hexdec
函数将解释十六进制表示法并将其转换为十进制值。
print(dechex(INT_MAX) . "\n");
这会打印“7fffffff
”。