Пример из учебника:
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. Из-за переполнения переходит просто в отрицательное?