Javascript.RU

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

Битовый сдвиг
Пример из учебника:
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. Из-за переполнения переходит просто в отрицательное?
Ответить с цитированием
  #2 (permalink)  
Старый 17.11.2023, 23:35
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от firep91613
Из (10000000000).toString(2) // '1001010100000010111110010000000000'
Это 34 бита.
Отбрасываем 2 левых, справа дописываем 00
(10)01010100000010111110010000000000 00
Итого 0101010000001011111001000000000000
Сдвигаем на 1 бит влево
(0) 101010000001011111001000000000000 0
Итого
1010100000010111110010000000000000
Старший разряд 1 (знак -) значит модуль (как вы правильно пишете)
~parseInt('010101000000101111100100000000000', 2) + 1 = 1474836480
Значит результат -1474836480
Ответить с цитированием
  #3 (permalink)  
Старый 18.11.2023, 13:30
Аспирант
Отправить личное сообщение для firep91613 Посмотреть профиль Найти все сообщения от firep91613
 
Регистрация: 24.10.2023
Сообщений: 58

voraa,
благодарю за содержательный ответ.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
sticky и сдвиг в Сафари Alexandroppolus Javascript под браузер 1 07.08.2019 14:36
Убрать сдвиг body Telnet (X)HTML/CSS 1 17.12.2015 00:48
JQuery carousel сделать сдвиг на один элемент Heidel jQuery 1 06.10.2014 09:13
Сдвиг блока вправо за границу экрана dalis jQuery 2 01.07.2013 23:39
Сдвиг при наведение мышки BelkinV Общие вопросы Javascript 8 28.11.2012 12:20