我从php主页阅读了手册
它写道:
// this doesn't go for
//hexadecimal specified integers above 2^32-1:
var_dump( 0x100000000 );
// output: int(2147483647)
但它有 4.5 个字节,比 int(4 个字节)大,我对其进行了测试。
它输出浮点数。
我不明白他们为什么矛盾?
我从php主页阅读了手册
它写道:
// this doesn't go for
//hexadecimal specified integers above 2^32-1:
var_dump( 0x100000000 );
// output: int(2147483647)
但它有 4.5 个字节,比 int(4 个字节)大,我对其进行了测试。
它输出浮点数。
我不明白他们为什么矛盾?
来自关于整数的 PHP 手册页:“如果 PHP 遇到超出整数类型边界的数字,它将被解释为浮点数。此外,导致数字超出整数类型边界的操作将返回而是漂浮。”
由于integer
类型太小而无法表示该数字,PHP 会自动将其转换为 a float
,这样您就不会丢失数据。这是预期的行为。
但是,您引用的具体示例在手册中显然是错误的。看起来有人在编写手册时出错了,或者可能是自编写手册页以来,超大十六进制文字的行为发生了变化。
它为我输出一个浮点数:float(4294967296)