Примечание: все следующие двоичные представления следует читать справа налево. Я не уверен, почему я думаю о них так, но я на самом деле не знал, что люди также представляют двоичные файлы слева направо. Смешение!
В статье 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.
Каковы промежуточные шаги, чтобы засвидетельствовать это преобразование? Я вижу, что ведущий бит становится перевернутым, тем самым меняя знак. Но это обо всем, что я могу собрать.