誰能告訴下面的代碼
<? $temp = 0; echo ~$temp; ?>
//instead of 1 it displays -1
誰能告訴下面的代碼
<? $temp = 0; echo ~$temp; ?>
//instead of 1 it displays -1
按位而不是(〜):
此反轉其操作數中的每一位。如果操作數是浮點值,則在計算之前將其截斷爲整數。如果操作數在0到4294967295之間(0xffffffff),它將被視爲一個無符號的32位值。否則,它被視爲一個有符號的64位值
它是因爲你實際上處理一個完整的32位無符號整數與NOT。這也就意味着你不能簡單的顛倒0001,但反轉00000000000000000000000000000001
成爲11111111111111111111111111111110
實質上這是數+ 1和否定。所以1成爲 - (NUM + 1),這是-1或二進制(無符號)
例如: - $溫度= 1;回聲〜$溫度;打印-2 // - (n ++)
echo ~$temp;
^bitwise not operator
假設32位的內部程序,Bitwise逆0000
是FFFF
(全1
的),這是-1
,在符號的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
因爲~0
是-1
。
~
運算符恢復0
的每一位。
的關係是:-$temp === ~$temp + 1
來自克蘇魯的好回答。 –
這個標誌很重要;) – Christoph