Примечание: все следующие двоичные представления следует читать справа налево. Я не уверен, почему я думаю о них так, но я на самом деле не знал, что люди также представляют двоичные файлы слева направо. Смешение!
В статье MDN для побитовых операторов JavaScript (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT) говорится, что оператор ~
является побитовым оператором NOT
.
В Википедии (https://en.wikipedia.org/wiki/Bitwise_operation#NOT) говорится: "Побитовое NOT или дополнение - это унарная операция, которая выполняет логическое отрицание на каждом бите, образуя дополнение к данному двоичному значению. Биты, которые равны 0, становятся равными 1, а те, которые равны 1, становятся 0."
Теперь возьмите число 5 в двоичном формате: 0101
Если я наберу ~5
в моей консоли браузера, я получаю -6
, двоичное представление которого 1110
. Я ожидал, что отрицание превратит 0101
в 1010
, что на самом деле 10 (или -2, если крайняя левая цифра считается знаком).
Все объяснения, которые я прочитал для оператора JavaScript ~
, говорят, что он оценивает число - (x + 1), но это не объясняет мне логически, что этот оператор делает на "поразрядном" уровне.
В принципе, 0101
становится 1110
.
Каковы промежуточные шаги, чтобы засвидетельствовать это преобразование? Я вижу, что ведущий бит становится перевернутым, тем самым меняя знак. Но это обо всем, что я могу собрать.