为什么这个说法在 PHP 中是正确的?
我不明白为什么 PHP 中的这个语句会回显“whaaa?” -- (0x0F | 0xF0)
应该是 0xFF
不是吗?
if((0x0FFFFFFF | 0xF0FFFFFF) != 0xFFFFFFFF) echo 'whaaa?';
I don't understand why this statement in PHP echos 'whaaa?' -- (0x0F | 0xF0)
should be 0xFF
no?
if((0x0FFFFFFF | 0xF0FFFFFF) != 0xFFFFFFFF) echo 'whaaa?';
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
该脚本的结果
是
: PHP 将大于 31 位的十六进制数转换为浮点数,因为整数是带符号的,因此只能保存 31 个正位。
十六进制数是无符号的,因此转换是有意义的。
第一个“或”运算将浮点数转换为整数,因为对浮点数执行“或”没有意义。所以PHP将float转换为int进行或,结果是int,但是接下来的十六进制转换是float,并且值不一样。
要将浮点数按位转换为整数,请将其与 0x0 或:
结果
The result of this script:
is
PHP converts hexadecimal numbers larger than 31 bits into floats, as an integer is signed, and can therefore only hold 31 positive bits.
Hexadecimal numbers are unsigned, so the conversion makes sense.
The first "or" operation converts the float into an integer, as it doesn't make sense to perform an "or" on a float. So PHP converts the float to an int for the or, the result is an int, but the next hexadecimal conversion is a float, and the values are not the same.
To convert the float to a integer in a bitwise fashion, OR it with 0x0:
results in
通过编写
var_dump((0x0FFFFFFF | 0xF0FFFFFF)) 来测试它
Test it by writing
var_dump((0x0FFFFFFF | 0xF0FFFFFF))