Подтвердить что ты не робот

В чем разница между оператором >>> в Java и JavaScript?

Код JavaScript:

alert( -123456 >>> 0 ); // Prints 4294843840

Код Java:

System.out.println( -123456 >>> 0 ); // Prints -123456

Почему? Я читал документацию, но я не нашел разницы. Как переносить JavaScript-код на Java?

4b9b3361

Ответ 1

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

Значение, которое вы видите 4294843840, представляет собой только те же биты, что и -123456, но интерпретируется как unsigned вместо подписанного.