Если в языке C результат действия оператора << строго определён, то этого нельзя сказать об операторе >>. В одних версиях языка C операция >> трактуется как беззнаковый сдвиг, в других — как сдвиг числа со знаком. В первом случае при сдвиге вправо старшие разряды заполняются нулями, во втором случае в них записывается значение знакового разряда.
В Java данная неоднозначность устранена. При выполнении оператора >> учитывается знак числа. Для обозначения беззнакового сдвига вправо введен новый оператор >>>. Он выполняет сдвиг вправо на указанное число разрядов; освободившиеся старшие разряды заполняются нулями.
byte i = -2;
i = i >>> 3;
Кроме оператора >>>, в Java определён оператор >>>=. Так, команду сдвига, приведенную в предыдущем примере, можно записать следующим образом:
i >>>= 3;