Я испытываю странную операцию сдвига вправо без знака, дающую неправильные результаты при попытке выполнить их на жестко закодированных, а не жестко закодированных данных на Java 8.
Я пытаюсь выполнить беззнаковый сдвиг вправо для подписанного байта 0xBF. Если я просто назначил байт со знаком переменной, а затем использовал переменную для выполнения беззнаковой операции сдвига вправо, я получил бы 0xDF. Если я жестко закодирую 0xBF в операцию сдвига вправо без знака, я получу 0x5F.
byte originalByte = (byte) 0xBF;
System.out.println("Original Data: " + toHexString(new byte[]{originalByte}));
byte rotatedByte = (byte) (originalByte >>> 1);
System.out.println("Rotated Data: " + toHexString(new byte[]{rotatedByte}));
byte signRemoved = (byte) (0xBF >>> 1);
System.out.println("Sign Removed Data: " + toHexString(new byte[]{signRemoved}));
Результат вышеупомянутого вызова Java.
Original Data: BF
Rotated Data: DF
Sign Removed Data: 5F
Как мне решить указанную выше проблему?
byteнаint, поскольку бит знака находится в другом месте. - person davmac   schedule 13.08.2016