Как работает побитовый оператор дополнения (~ тильда)? - PullRequest
163 голосов
/ 26 апреля 2009

Почему ~ 2 равно -3? Как работает оператор ~?

Ответы [ 13 ]

0 голосов
/ 30 марта 2017

Javascript тильда (~) приводит данное значение к своему дополнению - все биты инвертированы. Это все, что делает тильда. Это не знак самоуверенности. Не добавляет и не вычитает любое количество.

0 -> 1
1 -> 0
...in every bit position [0...integer nbr of bits - 1]

На стандартных процессорах для настольных ПК, использующих языки высокого уровня, такие как JavaScript, арифметика со знаком BASE10 является наиболее распространенной, но имейте в виду, что она не единственная. Биты на уровне ЦП подлежат интерпретации на основе ряда факторов. На уровне «кода», в данном случае JavaScript, они по определению интерпретируются как 32-разрядное целое число со знаком (давайте оставим поплавки вне этого). Думайте об этом как о кванте, эти 32-битные представляют много возможных значений одновременно. Это полностью зависит от конвертирующего объектива, через который вы их просматриваете.

JavaScript Tilde operation (1's complement)

BASE2 lens
~0001 -> 1110  - end result of ~ bitwise operation

BASE10 Signed lens (typical JS implementation)
~1  -> -2 

BASE10 Unsigned lens 
~1  -> 14 

Все вышеперечисленное верно одновременно.

0 голосов
/ 27 ноября 2015

Побитовый оператор - это унарный оператор, который работает по методу знака и величины согласно моему опыту и знаниям.

Например, ~ 2 приведет к -3.

Это связано с тем, что побитовый оператор сначала представляет число в знаке и амплитуде, равное 0000 0010 (8-битный оператор), где MSB является знаковым битом.

Тогда позже потребуется отрицательное число 2, которое равно -2.

-2 представляется как 1000 0010 (8-битный оператор) по знаку и величине.

Позже он добавляет 1 к LSB (1000 0010 + 1), что дает вам 1000 0011.

Что такое -3.

0 голосов
/ 11 февраля 2015

Сначала мы должны разделить данную цифру на ее двоичные цифры, а затем повернуть ее, добавив последнюю двоичную цифру. После этого выполнения мы должны поставить знак противоположный предыдущей цифре, которую мы находим завершенной ~ 2 = -3 Объяснение: Бинарная форма 2s - 00000010, изменения - 11111101, это дополнение к ним, затем дополняется 00000010 + 1 = 00000011, что является двоичной формой из трех и со знаком -e I.e, -3

...