2012-10-28 57 views
1

今天我一直在嘗試更多地瞭解PHP的按位運算符,並且我對〜運算符有點麻煩。遵循在線教程,我已經看到它反轉了一些數字中的設置位。舉例來說,如果你有等於7字節:Bitwise〜運算符

|------------------------------------| 
    | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | 
    |------------------------------------| 
    | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 
    |------------------------------------| 

和扭轉它使用〜7:

|------------------------------------| 
    | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | 
    |------------------------------------| 
    | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 
    |------------------------------------| 

那不是等於248,而不是-8?

回答

1

否。原因是Two's complement

每個號碼的第一個位得到了一個值(-2在PHP ,如PHP使用32位(= 4字節)的數字)。當該位設置爲1時,整個數字將變爲負數。因此,當使用非運算符(~)時,該位將改變,數字將變爲負數。

0

這是兩個補碼最左邊的位表示符號,0表示正值,1表示負值。這兩個補碼是通過反轉比特計算出來的,並加上1. 在這種情況下,它是1111000(符號位除外),然後減1(1110111)並反轉它(0001000,負),因此它是-8。 在C中,帶符號的整數範圍是-2^15-1到2^15。