Verschiebeoperationen

Status
Nicht offen für weitere Antworten.
H

Han

Gast
Hallo....kann mir bitte wer genau sagen was der Unterschied zwischen >> und >>> ist?

Ich weiß wie >> geht...also z.b.:

10 >> 3 ....01010 -> 01 = 1
Und bei 10 >>> 3 kommt dasselbe raus...was besteht also für ein Unterschied?

mfg,
Hannes
 

SnooP

Top Contributor
Das >> ist vorzeichenbehaftetes und >>> vorzeichenloses verschieben:

Code:
int y = 1 << 31;	//setze Vorzeichenbit
System.out.println(y+" und : "+(y>>1)+ "und: "+(y>>>1));
System.out.println(2*(y>>1));
System.out.println(Integer.toBinaryString(y));
System.out.println(Integer.toBinaryString(y>>1));
System.out.println("0"+Integer.toBinaryString(y>>>1));
//führende 0 wird von toBinaryString nicht angezeigt
Versuch dich mal an obigem... das 1 << 31 ist eine 1 mit 31 folgenden Nullen... sprich das Vorzeichenbit der Integervariablen y wird auf 1 gesetzt, so dass die Zahl negativ wird. Sie entspricht dann dezimal -2.147.483.648 also -2^31...
Wenn du jetzt nach rechts schiebst, wird tatsächlich wie gewohnt durch zwei geteilt - sprich es wird von links eine 1 reingeschoben... damit dies für die negativen Zahlen klappt. Wenn du auf Binärbasis nach rechts schieben willst und dir das Vorzeichen egal ist, kannst du >>> verwenden, um von links 0en reinschieben zu lassen. Dabei wird das Vorzeichen ignoriert und die Zahl wird dadurch natürlich positiv...

Das Beispiel eignet sich ganz gut um sich mal klar zu machen, wie Werte innerhalb von Variablen überhaupt gespeichert werden...

hth
 
H

Han

Gast
Ahhh...danke für das Bsp....kapiers jetzt....also dass >>> unterscheidet sich gegenüber >> nur wenn das linkeste Bit :)) ) eine 1 ist...sprich die Zahl negativ wird.

mfg,
Hannes
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben