为什么这个陈述在PHP中是正确的?
-
06-07-2019 - |
题
我不明白为什么这个声明在PHP回声'whaaa?' - (0x0F | 0xF0)
应该是 0xFF
no?
if((0x0FFFFFFF | 0xF0FFFFFF) != 0xFFFFFFFF) echo 'whaaa?';
解决方案
此脚本的结果:
var_dump((0x0FFFFFFF));
var_dump((0xF0FFFFFF));
var_dump((0x0FFFFFFF | 0xF0FFFFFF));
var_dump((0xFFFFFFFF));
var_dump(((0x0FFFFFFF | 0xF0FFFFFF)) != (0xFFFFFFFF));
是
int(268435455)
float(4043309055)
int(-1)
float(4294967295)
bool(true)
PHP将大于31位的十六进制数转换为浮点数,因为整数是有符号的,因此只能容纳31个正位。
十六进制数字是无符号的,因此转换是有意义的。
第一个“或”操作将浮点数转换为整数,因为执行“或”操作没有意义。在一个浮点数上。所以PHP将float转换为int的int,结果是一个int,但是下一个十六进制转换是float,并且值不相同。
以按位方式将float转换为整数,或者将其与0x0:
转换为整数var_dump((0xFFFFFFFF | 0x0));
var_dump(((0x0FFFFFFF | 0xF0FFFFFF)) != (0xFFFFFFFF | 0x0));
结果
int(-1)
bool(false)
- 亚当
其他提示
通过编写 var_dump((0x0FFFFFFF | 0xF0FFFFFF))
不隶属于 StackOverflow