byte x = -1;
for(int i = 0; i < 8; i++)
{
x = (byte) (x >>> 1);
System.out.println("X: " + x);
}
Jak rozumiem, java przechowuje dane w uzupełnieniu do dwóch elementów, co oznacza -1 = 11111111 (według Wikipedii).manipulacja bitem java
Również z dokumentacji java: "Wzorzec bitowy jest podany przez lewy operand, a liczba pozycji do przesunięcia przez prawy operand Operatory przesuniętej prawej prawej zmiany" >>> "przesunięcia zero do najbardziej wysuniętej na lewo pozycji, natomiast najbardziej wysunięta na lewo pozycja po ">>" zależy od przedłużenia znaku. "
Co oznacza, że >>> przesuwa zawsze 0 w lewo najbardziej za każdym razem. Więc spodziewać ten kod do być
iteracja: nieco reprezentacja x
0: 11111111
1: 01111111
2: 00111111
3: 00011111
. ..to na
Jednak moje wyniki to alwa ys X: -1, co oznacza (myślę), że >>> umieszcza bit znaku w lewej pozycji najbardziej. Więc wtedy spróbuję >> i ten sam rezultat.
Co się dzieje? Oczekuję, że moje wyniki będą: X: -1, x: 127, x: 63, itd.
Jest to jeden z problemów w Javie Puzzlers. – starblue