2011-08-31 75 views
2

在Javascript中,當我做這個的JavaScript位運算符的問題

var num = 1; 

~ num == -2 

爲什麼〜NUM不等於0

二進制1存儲爲1 ...因此沒有1應被0

或它存儲象0001因此不是0001。將1110

我想我失去了一些東西......有人可以清除這件事

+0

你忘記了其他位。 –

回答

5

查找Two's complement有符號二進制數

讓我們假設JavaScript數字是8個位寬(其中它不是):

然後

1 = 0000 0001b 

~1 = 1111 1110b 

哪個的-2

0000 0010b = 2 
0000 0001b = 1 
0000 0000b = 0 
1111 1111b = -1 
1111 1110b = -2 
2

~二進制表示切換的操作數的比特,從而

00000001 

變得

11111110 

這是-2

注意:在javascript中,數字是32位的,但我縮短它來說明這一點。

1

documentation

按位注意到任何數x的產量 - (X + 1)。例如,〜5產生-6。

1

原因是使用按位NOT可以反轉所有位的值。如果將值1存儲在帶符號的8位整數中,則存儲二進制值00000001.如果應用NOT NOT位,則會得到11111110,對於帶符號的8位整數,該值爲二進制值 - 2。