Witam, napotkałem pewien problem przy operatorach przesunięć. Zgodnie z definicją << jest operatorem przesunięcia w lewo i wstawia, w binarnej wersji, zera na najmłodszych bitach. Operator >> jest operatorem przesunięcia w prawo i wstawia zera na najstarszych bitach jeśli wartość jest dodatnia oraz zera, gdy wartość jest ujemna. Operator >>> jest operatorem przesunięcia w prawo i niezależnie od znaku wartości wstawia zera na najstarszych bitach. Wszystko się zgadza poza jednym przypadkiem. Jeśli zmienna, którą przesuwamy jest typu short, byte lub char i jest ujemna to operator >>> nie wstawia zer na najstarszych bitach tylko jedynki, co zaprzecza definicji. Wiem też, że przed przesunięciem wartości tych typów następuje rzutowanie na int.
short s = -10;
System.out.println(Integer.toBinaryString(s));
s >>>= 1;
System.out.println(Integer.toBinaryString(s));
Konsola:
11111111111111111111111111110110
11111111111111111111111111111011
a według definicji powinno być:
11111111111111111111111111110110
1111111111111111111111111111101