Shift-Operatoren

XPenguen

Mitglied
Hallo, hab eine Frage zu Shift-Operatoren.
Java:
public static void main(String[]args){
short number=Short.MIN_VALUE;
  System.out.println((short)(number>>>1));
  System.out.println((short)(number>>1));
}

Ich dachte, dass der >>> Shift-Operator im Vergleich zum >> Shift-Operator den Sign-Bit nicht beachtet ??? Sollte die Ausgabe nicht +16384 und nicht -16384 ??? Ich bekomme bei beiden Operatoren das gleiche Ergebis.

Danke euch 🙂
 
Interessante Frage, aber eine triviale Antwort.
Der Bit-Shift-Operator nimmt dir eine Zahl und eine int-Zahl für die Shift Aktion (also: <Number> shift <int>). Das Problem auf was du jetzt stößt, ist das Java jetzt beide Operatoren auf int castest und auch so weiter rechnet.
Was wirklich passiert bei: (short)(Short.MIN_VALUE >>> 1)
Code:
10000000 00000000 >>> 1  wird:11111111 11111111 10000000 00000000 >>> 1 <=> 01111111 11111111 11000000 00000000 wird mit short-cast: 11000000 00000000
Da ja die oberen Bits abgeschnitten werden.

Du kannst zum richtigen Ergebnis kommen, indem du gleich mit Integer rechnest, oder du deine 16 Bits auf die höheren 16 Bits hebst, deine Operationen drauf machst und dann wieder auf die niederen 16 Bit holst:
Java:
public static void main(String... args) {
   short i = Short.MIN_VALUE;
   System.out.println((short) (i << 16 >> 1 >> 16));
   System.out.println((short) (i << 16 >>> 1 >> 16));
}
 

Zurück
Oben