谁能告诉下面代码的内部过程
<? $temp = 0; echo ~$temp; ?>
//instead of 1 it displays -1
按位非 (~):
这会反转其操作数的每一位。如果操作数是浮点值,则在计算之前将其截断为整数。如果操作数介于 0 和 4294967295 (0xffffffff) 之间,它将被视为无符号 32 位值。否则,将其视为带符号的 64 位值
这是因为您实际上是在使用 NOT 处理完整的 32 位无符号整数。这意味着你不是简单地反转 0001 而是反转 00000000000000000000000000000001
变成 1111111111111111111111111111110
本质上这是数字 + 1 并被否定。所以 1 变为 -(num+1) 即 -1 或 1111111111111111111111111111110 二进制(无符号)
例如:- $temp=1;回声~$temp; 打印 -2 //-(n++)
因为~0
是-1
。
~
运算符还原0
.
关系是:-$temp === ~$temp + 1