十六进制整数溢出

时间:2012-06-14 19:27:33

标签: php

我从php主页

阅读了手册

它写道:

// this doesn't go for 
//hexadecimal specified integers above 2^32-1:

var_dump( 0x100000000 );

// output: int(2147483647)

但它有4.5个字节,大于int(4个字节),我测试它。

输出浮动。

我不明白为什么他们会矛盾?

2 个答案:

答案 0 :(得分:3)

来自the PHP manual page on integers:“如果PHP遇到超出整数类型边界的数字,它将被解释为浮点数。此外,导致超出整数类型边界的数字的操作将而是返回一个浮点数。“

由于integer类型太小而无法表示该数字,因此PHP会自动将其转换为float,因此您不会丢失数据。这是预期的行为。

但是,您引用的具体示例在手册中显然是错误的。看起来有人在编写手册时出错了,或者可能是自手写页面编写时起超大十六进制文字的行为发生了变化。

答案 1 :(得分:0)

它为我输出一个浮点数:float(4294967296)

DEMO:http://codepad.org/otsGOiWf