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?
 

httpdigest

Top Contributor
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. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
G Merkwürdiges Verhalten der Maven IDE Java Basics - Anfänger-Themen 3
D Unerwartetes Verhalten bei Client Server Chat App Java Basics - Anfänger-Themen 12
B Programm beendet sich nicht und weiteres seltsames Verhalten Java Basics - Anfänger-Themen 9
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
MiMa Seltsames Verhalten im Konstruktor Java Basics - Anfänger-Themen 6
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
K Klassen Eclipse Verhalten bei Klassen Java Basics - Anfänger-Themen 16
M Verhalten von LocalDateTime#getNano() Java Basics - Anfänger-Themen 1
T Objekte mit Verhalten Java Basics - Anfänger-Themen 14
D Klassen Verhalten von Klassenvererbung bei Variablen Java Basics - Anfänger-Themen 1
D Seltsames Verhalten... Java Basics - Anfänger-Themen 5
O JFileChooser Verhalten -Pfad Java Basics - Anfänger-Themen 15
S Verhalten von JTextField in einem JTabbedPane (Register) Java Basics - Anfänger-Themen 6
G Input/Output Verhalten BuffferedReader bei unvollständigen Zeichen Java Basics - Anfänger-Themen 1
D Interface für Verhalten von "=="? Java Basics - Anfänger-Themen 21
B Thread komisches Verhalten auf Mac ... Java Basics - Anfänger-Themen 6
B Komisches Verhalten von ArrayList Java Basics - Anfänger-Themen 6
S JInternalFrame in JInternalFrame - Verhalten Java Basics - Anfänger-Themen 2
F Nicht nachvollziehbares Verhalten Java Basics - Anfänger-Themen 7
K Komisches Verhalten beim erstellen einer Datei Java Basics - Anfänger-Themen 5
T unerklärliches Verhalten von Scanner Java Basics - Anfänger-Themen 2
Ham Verhalten beim Initialisieren von Arrays Java Basics - Anfänger-Themen 16
D Komisches Verhalten einer For-Schleifen Java Basics - Anfänger-Themen 7
zilti Unlogisches Verhalten Java Basics - Anfänger-Themen 4
N public void und verhalten bei return Java Basics - Anfänger-Themen 2
A Seltsames Verhalten beim ButtonClick (ActionListener() ) Java Basics - Anfänger-Themen 7
P Komisches Verhalten von BufferedReader und readLine() Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben