任何人都可以告诉以下代码的内部程序
<? $temp = 0; echo ~$temp; ?>
//instead of 1 it displays -1
答案 0 :(得分:4)
echo ~$temp;
^bitwise not operator
假设32位,0000
的 Bitwise 反转为FFFF
(所有1
),-1
,在signed int的案例中。
另一种看待它的方式:~
做的是为您提供 (One's complement)
为了得到一个数字的负数,你取2的补码,这就是
1's complement + 1
所以,
(1's complement of 0) + 1 = 0 //negative 0 is 0
hence, 1's complement of 0 = -1
答案 1 :(得分:1)
按位 - 不是(〜):
这会反转其操作数的每一位。如果操作数是浮点值,则在计算之前将其截断为整数。如果操作数介于0和4294967295(0xffffffff)之间,则将其视为无符号32位值。否则,它被视为带符号的64位值
因为你实际上是在用NOT处理一个完整的32位无符号整数。这意味着你不是简单地反转0001而是反转00000000000000000000000000000001
成为11111111111111111111111111111110
基本上这是数字+ 1并且否定了。所以1变为 - (num + 1),即-1或 1111111111111111111111111111110 在二进制(无符号)
例如: - $温度= 1;回声〜$温度; print -2 // - (n ++)
答案 2 :(得分:0)
因为~0
是-1
。
~
运算符会恢复0
的每一位。
关系是:-$temp === ~$temp + 1