Как работает побитовый подписанный символ ~ - PullRequest
0 голосов
/ 06 июня 2018

Итак, я просмотрел несколько веб-сайтов и до сих пор не понимаю, что делает битовый оператор ~.По сути, я понимаю, что для числа, такого как 4, которое будет представлено в двоичном виде как 100, следует перевернуть, когда вы положите ~ 4 в 011;однако, кажется, что-то становится -5, тогда учебники говорят что-то о 32-битном представлении с загрузкой отрицательного числа.На данный момент я полностью потерян, пожалуйста, объясните, как ~ работает.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

4 = 00000000 00000000 00000000 00000100

~4 = 11111111 11111111 11111111 11111011

Поскольку самый левый бит - это знаковый бит в 32-битном значении со знаком, этооткуда ваши отрицательные значения.Немного связано: вы также можете прочитать о MSB , LSB .

0 голосов
/ 06 июня 2018

Число 4 не 100.Это 00000000000000000000000000000100.Все эти нули переворачиваются на единицы на ~.

Полученное число отрицательно из-за того, как эти 32-битные значения интерпретируются при преобразовании обратно в обычные числа JavaScript.Но я забегаю вперед: первое, что делает битовый оператор в JavaScript, это создает временное 32-битное целочисленное значение из номера источника.Затем оператор делает свое дело, что в случае ~ - инвертировать все биты этого 32-битного значения.Затем число преобразуется обратно в 64-битное значение с плавающей запятой двойной точности, которое является обычным числовым типом JavaScript.

32-битные значения интерпретируются как знаковые значения, которыеимеет отношение к тому, как работает компьютерная арифметика.Достаточно сказать, что любое 32-разрядное значение, у которого самый левый (самый значимый) бит равен 1, интерпретируется как отрицательное значение.

Двоичная математика и способ современных компьютеров (ну, почти все исторические)тоже) сделать это вроде - широкий предмет.Некоторые языки программирования предоставляют абстракции, которые в основном скрывают реальность работы вычислительного оборудования на самом деле ;JavaScript на самом деле не является одним из этих языков в большинстве реализаций.

...