Показать сообщение отдельно
  #1 (permalink)  
Старый 17.11.2023, 22:26
Аспирант
Отправить личное сообщение для firep91613 Посмотреть профиль Найти все сообщения от firep91613
 
Регистрация: 24.10.2023
Сообщений: 55

Битовый сдвиг
Пример из учебника:
alert(10000000000 << 1); // -1474836480, отброшен крайний-левый бит
Как здесь получается -1474836480?

10000000000 - не вмещается в 32 бита (макс. 2147483647). Значит будет отброшен крайний левый бит. Или три крайних левых? Из (10000000000).toString(2) // '1001010100000010111110010000000000' станет '001010100000010111110010000000000'. Теперь число 1410065408 вмещается в 32 бита. Применяется к нему левый сдвиг, т.е. из '001010100000010111110010000000000' станет '010101000000101111100100000000000' - в десятичной 2820130816. Оно снова не влазит в 32 бита. Что проcиходит дальше? Я так понял это: ~(~parseInt('010101000000101111100100000000000', 2) + 1) // -1474836481. Из-за переполнения переходит просто в отрицательное?
Ответить с цитированием