2012-11-01 76 views
6

誰能告訴下面的代碼

<? $temp = 0; echo ~$temp; ?> 
    //instead of 1 it displays -1 

回答

1

按位而不是(〜):

此反轉其操作數中的每一位。如果操作數是浮點值,則在計算之前將其截斷爲整數。如果操作數在0到4294967295之間(0xffffffff),它將被視爲一個無符號的32位值。否則,它被視爲一個有符號的64位值

它是因爲你實際上處理一個完整的32位無符號整數與NOT。這也就意味着你不能簡單的顛倒0001,但反轉00000000000000000000000000000001

成爲11111111111111111111111111111110

實質上這是數+ 1和否定。所以1成爲 - (NUM + 1),這是-1或二進制(無符號)

例如: - $溫度= 1;回聲〜$溫度;打印-2 // - (n ++)

4
echo ~$temp; 
    ^bitwise not operator 

假設32位的內部程序,Bitwise0000FFFF(全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

來自克蘇魯的好回答。 –

+0

這個標誌很重要;) – Christoph

0

因爲~0-1

~運算符恢復0的每一位。

的關係是:-$temp === ~$temp + 1

相關問題