В чем разница между оператором >>> в Java и JavaScript?
Код JavaScript:
alert( -123456 >>> 0 ); // Prints 4294843840
Код Java:
System.out.println( -123456 >>> 0 ); // Prints -123456
Почему? Я читал документацию, но я не нашел разницы. Как переносить JavaScript-код на Java?
Ответ 1
Оба являются логическим сдвигом вправо, но JavaScript имеет некоторые странности в том, как он обрабатывает числа. Обычно числа в JavaScript - это float, но побитовые операции преобразуют их в беззнаковые 32-битные целые числа. Поэтому, несмотря на то, что значение похоже, оно не должно меняться, оно преобразует число в 32-разрядное целое без знака.
Значение, которое вы видите 4294843840, представляет собой только те же биты, что и -123456, но интерпретируется как unsigned вместо подписанного.