谁能告诉我下面代码的内部过程
<? $temp = 0; echo ~$temp; ?>
//instead of 1 it displays -1发布于 2012-11-01 20:57:43
按位-非(~):
这将反转其操作数的每一位。如果操作数是浮点值,则在计算前将其截断为整数。如果操作数介于0和4294967295 (0xffffffff)之间,它将被视为无符号32位值。否则,它将被视为有符号的64位值。
这是因为您实际上是在使用NOT处理一个完整的32位无符号整数。这意味着你不是简单地倒置0001,而是倒置0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
变为11111111111111111111111111111111111111111111111111
从本质上讲,这是一个数字+1,并被取反。因此,1变为-(num+1),表示-1或1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110(无符号)
例如:- $temp=1;echo~$temp;print -2 //-(n++)
发布于 2012-11-01 19:45:37
echo ~$temp;
^bitwise not operator假设32位,0000的逆是FFFF (所有1的),在有符号整数的情况下是-1。
:~所做的就是给你一个
为了得到一个数字的负数,你需要取2的补码,这就是1's complement + 1
所以,
(1's complement of 0) + 1 = 0 //negative 0 is 0
hence, 1's complement of 0 = -1发布于 2012-11-01 19:45:54
因为~0是-1。
~运算符会还原0的每一位。
关系是:-$temp === ~$temp + 1
https://stackoverflow.com/questions/13176326
复制相似问题