вопрос побитового оператора javascript - PullRequest
2 голосов
/ 31 августа 2011

В Javascript, когда я делаю это

var num = 1;

~ num == -2

почему ~ num не равно 0

в двоичном 1 хранится как 1 ... таким образом, не 1 должно быть 0

или он хранится как 0001, поэтому не 0001 будет 1110

Я думаю, что что-то упустил ... Может кто-нибудь это прояснить

Ответы [ 4 ]

5 голосов
/ 31 августа 2011

Посмотрите Дополнение до двух для двоичных чисел со знаком

Предположим, что число 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 голосов
/ 31 августа 2011

~ переключает биты операнда так,

00000001

становится

11111110

что составляет -2

Примечание: в javascript числа 32-битные, но я сократил их, чтобы проиллюстрировать это.

1 голос
/ 31 августа 2011

Причина этого в том, что использование побитового НЕ инвертирует все биты значения.Если вы сохраняете значение 1 в 8-битном целом со знаком, вы сохраняете двоичное значение 00000001. Если вы применяете побитовое НЕ, вы получаете 11111110, что для 8-битного целого со знаком является двоичным значением для -2.

1 голос
/ 31 августа 2011

Из документации :

Поразрядно, ОТСУТСТВУЯ любое число x дает - (x + 1).Например, ~ 5 дает -6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...