Operatoren Verhalten von BitShiftOperatoren

MarvinsDepression

Bekanntes Mitglied
Eigentlich dachte ich, da gäbe es nicht viel zu wissen, verwende ich doch gerne und recht häufig Bitmanipulation mittels <<, >> und >>>.
Jetzt habe ich mal etwas intensiver damit rumgespielt und ein Verhalten entdeckt, welches mir neu war.
Z.B. bei 32Bit-Zahlen hätte ich erwartet, dass bei einem linksshift um mehr als 31 Stellen auf jeden Fall 0 zurückgegeben wird, also 1 << 32 = 0.
Dem ist aber nicht so. Es macht den Anschein, als ob stattdessen 1 << (32 & 31) berechtet wird, und das entspricht dann 1 << 0 = 1 (Analog auch für >> und >>>).
Im Netz finde ich hierzu gerade nichts. Kennt wer eine ausfürlichere Dokumentation zum Thema?
 
Jegliches Verhalten von allem, was die Java Sprache selbst angeht (also Operatoren, Methodenaufrufe, etc.) wird für jedes noch so kleine Detail von der Java Language Specification definiert. Und so auch dieses Verhalten:
If the promoted type of the left-hand operand is int, then only the five lowest-order bits of the right-hand operand are used as the shift distance. It is as if the right-hand operand were subjected to a bitwise logical AND operator & (§15.22.1) with the mask value 0x1f (0b11111). The shift distance actually used is therefore always in the range 0 to 31, inclusive.
Du musst also nur die komplette JLS lesen und dann weißt du quasi alles. 🙂
 

Neue Themen


Zurück
Oben