Shift Operatoren

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,

bei dem foldenden Code:

Code:
byte b = -128;
System.out.println("-128 >> 1 = " + (b >> 1));
b = -128;
System.out.println("-128 >>> 1 = " + (b >>> 1));

wird

-128 >> 1 = -64
-128 >>> 1 = 2147483584

ausgegeben. Ich habe eigentlich mit

-128 >> 1 = -64
-128 >>> 1 = 64

gerechnet. Wo liegt mein Fehler und wie kann ich die von mir erwartete Ausgabe erreichen?

Gruß, Chris
 

byte

Top Contributor
Bei >> wird mit 1en aufgefüllt, bei >>> mit 0en. Das heisst bei -128 >>> 1 kommt ganz rechts ne null rein, das heisst, die Zahl wird positiv. Da jedoch negative Zahlen im Zweierkomplement binär dargestellt werden, ist das halt eben nicht die 64.

Wenn Du das Vorzeichen umdrehen willst, kannst Du das so machen:

Code:
b1 = -128;
b2 = ~b1+1;
 
G

Guest

Gast
byto hat gesagt.:
Bei >> wird mit 1en aufgefüllt, bei >>> mit 0en. Das heisst bei -128 >>> 1 kommt ganz rechts ne null rein, das heisst, die Zahl wird positiv. Da jedoch negative Zahlen im Zweierkomplement binär dargestellt werden, ist das halt eben nicht die 64.

Eben drum erwarte ich ja die 64. Das byte b sieht so aus: 8 Bit = 10000000. Wenn ich jetzt um eins Shifte >>> sollte 01000000 raus kommen, was ja 64 (Zweierkomplement binär) ist. Anscheinend funktioniert der >>> Operator nur für int und das byte wird vorher implizit in int konvertiert. Ich suche eigentlich nach einem Weg, die Konvertierung zu vermeiden...
 

byte

Top Contributor
Java rechnet implizit immer mit ints. Die bytes werden beim shiften also implizit in ints umgewandelt. Wenn Du b >>> 1 machst, dann wird das b in int umgewandelt. Dann wird links ne 0 reingeschoben (an bit 32) und danach wird wieder in byte umgewandelt (also 24 bit werden abgeschitten). Da aber die -64 als int links ganz viele 1en hat, hast du nun ganz links in deinem byte eben keine 0 sondern eine 1 (aus dem 2er Komplement der Zahl als int).

Wie gesagt, das Vorzeichen kannst Du besser so umdrehen (oder Du rechnest halt gleich mit ints und betrachtest nur die letzten 8 bit):

Code:
~b+1;
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
X Shift-Operatoren Java Basics - Anfänger-Themen 1
M hexadezimal in binär mit Hilfe von Shift-Operatoren Java Basics - Anfänger-Themen 6
J bundel - Datei wird nicht gefunden. Trotz STRG-SHIFT-J Java Basics - Anfänger-Themen 2
O Erste Schritte x*y*z mit Shift Operator moeglich? Java Basics - Anfänger-Themen 15
M Shift Operator Java Basics - Anfänger-Themen 3
M rechts shift (>>>) einer negativen Zahl Java Basics - Anfänger-Themen 10
StrikeTom Shift + pfeiltaste ermitteln Java Basics - Anfänger-Themen 3
U void shift Java Basics - Anfänger-Themen 7
M Binärdarstellung in Java mit Shift-Operator + bitweises und Java Basics - Anfänger-Themen 2
M MenuShortcut nur mittels Shift+Taste Java Basics - Anfänger-Themen 3
B Spielereien mit bit wise Operatoren und langen Binärzahlen Java Basics - Anfänger-Themen 3
Kleinerals2 NaN Operatoren Java Basics - Anfänger-Themen 3
S Und-Abfrage mit mehreren Ungleich-Operatoren Java Basics - Anfänger-Themen 17
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
D Erste Schritte Operatoren zur Manipulation von Bits "~" Java Basics - Anfänger-Themen 5
M Operatoren Umwandlung div. Operatoren Java Basics - Anfänger-Themen 7
V Operatoren Was will mir die Tabelle in meinem Lehrbuch sagen? (logische Operatoren) Java Basics - Anfänger-Themen 4
S Bitweise Operatoren" >>>",">>","<<" erklärung Java Basics - Anfänger-Themen 5
G operatoren Java Basics - Anfänger-Themen 3
beatles Operatoren Operatoren - Berechnung Java Basics - Anfänger-Themen 40
T Verständnisfrage Zuweisungs-/arithmet. Operatoren Java Basics - Anfänger-Themen 2
P Bitweise Operatoren Java Basics - Anfänger-Themen 2
Phillip Bitweise Operatoren Java Basics - Anfänger-Themen 11
C Operatoren Java Basics - Anfänger-Themen 6
P Taschenrechner, operatoren Java Basics - Anfänger-Themen 4
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
S Operatoren & Terminierung Java Basics - Anfänger-Themen 1
A Bitweise Operatoren Java Basics - Anfänger-Themen 1
O Priorität bei Operatoren Java Basics - Anfänger-Themen 4
N Potenzierung durch einfache Operatoren Java Basics - Anfänger-Themen 13
B Geschwindigkeitsabhängigkeit von Anz. d. Operatoren pro Zeile Java Basics - Anfänger-Themen 12
S Arithmetische Operatoren Java Basics - Anfänger-Themen 7
L Erste Schritte Fragen zu Arrays, Inkrement Operatoren, Dekrement Operatoren ? Java Basics - Anfänger-Themen 9
lulas[]args Fehler - Logische Operatoren Java Basics - Anfänger-Themen 9
H Nur Zahlen, Klammern und Operatoren Java Basics - Anfänger-Themen 3
D Frage zu Bit Operatoren in der Programmierung Java Basics - Anfänger-Themen 9
P Anzahl der else if Operatoren begrenzt?? Java Basics - Anfänger-Themen 7
L [Logische Operatoren] referenzierbar? Java Basics - Anfänger-Themen 3
W Was tun die Operatoren ? und : (Bedingungen) Java Basics - Anfänger-Themen 15
W Datentypen Operatoren für eigenen Datentyp nutzen Java Basics - Anfänger-Themen 2
G Logische und Bitweise Operatoren Java Basics - Anfänger-Themen 2
S Datentypen Operatoren und Ausdrücke (formel richtig rechnen) Java Basics - Anfänger-Themen 8
E Logische Operatoren && und & Java Basics - Anfänger-Themen 14
? Operatoren && || Java Basics - Anfänger-Themen 10
M Aufgabe Arithmetische Operatoren Java Basics - Anfänger-Themen 12
H While Schleife mit Operatoren Java Basics - Anfänger-Themen 14
T Rechnen mit Operatoren Java Basics - Anfänger-Themen 2
M Arithmetische Operatoren Java Basics - Anfänger-Themen 40
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
M Sind ternäre Operatoren für einen guten Programmierstil wichtig ? Java Basics - Anfänger-Themen 10
E IF Anweisung mit logischen Operatoren Java Basics - Anfänger-Themen 18
JStickman Was bringen Bit-Operatoren? Java Basics - Anfänger-Themen 14
J Matheaufgabe aus String mit mehreren Operatoren Java Basics - Anfänger-Themen 16
D Logische Operatoren Java Basics - Anfänger-Themen 6
D Grundlagen - Operatoren Java Basics - Anfänger-Themen 5
1 Datentypen Rückgabetyp von Java-Operatoren Java Basics - Anfänger-Themen 2
V Bitweise Operatoren in der Grafikprogrammierung Java Basics - Anfänger-Themen 2
SebSnake Operatoren für eigene Datentypen Java Basics - Anfänger-Themen 3
M logische operatoren Java Basics - Anfänger-Themen 2
C Variablen für Operatoren Java Basics - Anfänger-Themen 3
W Rangfolge von Operatoren Java Basics - Anfänger-Themen 16
N zahlen und operatoren gemischt in einem Feld Java Basics - Anfänger-Themen 9
T Logische Operatoren Java Basics - Anfänger-Themen 39
C Dynamische Operatoren! Java Basics - Anfänger-Themen 5
R Bedingte Opeatoren / Verschachtelte Operatoren Java Basics - Anfänger-Themen 4
7 Operatoren in der While Schleife Java Basics - Anfänger-Themen 5
H Postfix Operatoren Java Basics - Anfänger-Themen 2
S Variablen + Operatoren "mixen" Java Basics - Anfänger-Themen 5
F Experimente mit Bit-Operatoren Java Basics - Anfänger-Themen 7
G Nutzen von bitweisen Operatoren Java Basics - Anfänger-Themen 8
J Operatoren in Java Java Basics - Anfänger-Themen 2
S Verwendung bitweiser Operatoren Java Basics - Anfänger-Themen 6
R Binäre logische Operatoren Java Basics - Anfänger-Themen 21

Ähnliche Java Themen

Neue Themen


Oben