Ответ 1
Оба являются логическим сдвигом вправо, но JavaScript имеет некоторые странности в том, как он обрабатывает числа. Обычно числа в JavaScript - это float, но побитовые операции преобразуют их в беззнаковые 32-битные целые числа. Поэтому, несмотря на то, что значение похоже, оно не должно меняться, оно преобразует число в 32-разрядное целое без знака.
Значение, которое вы видите 4294843840
, представляет собой только те же биты, что и -123456
, но интерпретируется как unsigned вместо подписанного.