@edu378

Причина результата побитового НЕ в JavaScript?

Есть число 9 (по осн. 10) = 0000 0000 0000 0000 0000 0000 0000 1001 (по осн. 2)
Оператор ~ возвращает обратный код:
1111 1111 1111 1111 1111 1111 1111 0110 (по осн. 2)

Вопрос: как получается, что это число равно -10 в десятичной системе? Знак "-" понятно, единица занимает один из 32 битов. Но оставшаяся часть при переводе не дает 10. При использовании результат.toString браузер выдает -1010. Объясните пожалуйста.
  • Вопрос задан
  • 311 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
AnnTHony
@AnnTHony
Интроверт
А чему вы надеялись или предполагали это число будет равно?
Раз в старшем разряде "1", значит число отрицательное.
Как получить из двоичного кода отрицательное в десятичном? Просто!
Для этого надо понять как получать отрицательные в двоичном. Что имеем: разрядность - 32 бита, число, которое нужно перевести в двоичный код "-10".
В шестнадцатеричном коде будет так: (0хFFFFFFFF - 0хА) + 0х1, это тоже самое что число "+10" представить в обратном коде и прибавить к результату единицу.
Еще можно так: 4294967295 - 10 + 1, что в двоичном коде даст тот же результат 1111 1111 1111 1111 1111 1111 1111 0110
Для получения положительного числа операция та же, обратный код + 1.
JS я плохо знаю, но результат логичный: 1010 он перевел как 10 в десятичной сс и просто подписал знак "минус".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы