Es gibt nur drei Java-Verschiebungsoperatoren: << (Rechtsverschiebung mit Vorzeichen) und >>>
1. Linksschiebeoperator
Linksschiebeoperator<< verschiebt alle Bits des angegebenen Werts um eine bestimmte Anzahl von Malen nach links.
1) Das allgemeine Format lautet wie folgt:
Wert <
Denken Sie nur an eine Sache zu den Regeln der Linksverschiebung: Verwerfen Sie das höchste Bit und füllen Sie das niedrigste Bit mit 0.
Wenn die Anzahl der verschobenen Bits die maximale Anzahl der Bits des Typs überschreitet, nimmt der Compiler ein Modulo von die Anzahl der verschobenen Bits. Wenn beispielsweise der Typ int um 33 Bit verschoben wird, werden tatsächlich nur 332=1 Bit verschoben.
2) Operationsregeln
Verschieben Sie alle Zahlen um die entsprechende Anzahl von Stellen in Binärform nach links, verschieben Sie die hohen Bits heraus (verwerfen) und füllen Sie die leeren Bits der niedrigen Bits mit Nullen auf .
Wenn der Operand der Linksverschiebung vom Typ int ist, wird das 31. Bit jedes Mal herausgeschoben und verworfen, wenn der Operand der Linksverschiebung vom Typ long ist bewegt sich um 1 Bit, sein 31. Bit Bit 63 wird entfernt und verworfen.
Wenn der Linksverschiebungsoperand vom Typ Byte und Short ist, werden diese Typen automatisch zum Typ Int erweitert.
Solange die Zahl nicht überläuft, ist bei positiven und negativen Zahlen das Verschieben um eine Position nach links gleichbedeutend mit der Multiplikation mit 2 hoch 1 und dem Verschieben von n Bits nach links entspricht dem Multiplizieren von 2 mit der n-ten Potenz
Zum Beispiel: 3 <<2 (3 ist vom Typ int)
1) Konvertieren Sie 3 in eine Binärzahl 0000 0000 0000 0000 0000 0000 0000 0011,
2) Verschiebe die beiden Nullen in den oberen Bits (links) der Zahl und verschiebe alle anderen Zahlen um 2 Bits nach links,
3 ) Füllen Sie die beiden Leerbits in den Low-Bits (rechts) mit Nullen auf. Das Endergebnis ist 0000 0000 0000 0000 0000 0000 0000 1100,
in Dezimalzahl umgewandelt ist 12.
Wenn die Anzahl in höherwertige Bits (31 oder 63 Bits) verschoben wird, wird der Wert negativ. Das folgende Programm veranschaulicht dies:
public class MultByTwo {
public static void main(String args[]) {
int i;
int num = 0xFFFFFFE;
for(i=0; i<4; i ) {
num = num << 1;
System.out.println(num );
}
}
}
2. Rechtsverschiebungsoperator
Rechtsverschiebungsoperator<< bewirkt, dass alle Bits des angegebenen Werts um die angegebene Anzahl von Malen nach rechts verschoben werden.
1) Das allgemeine Format lautet wie folgt:
Wert >>
Denken Sie nur an eine Sache zur Rechtsverschiebungsregel: Das Vorzeichenbit bleibt unverändert und das Vorzeichenbit wird nach links hinzugefügt
2) Operationsregeln:
Bewegen Sie alle Zahlen um die nach rechts entsprechende Anzahl von Ziffern in Binärform, die niedrigen Bits werden herausgeschoben (verworfen) und die hohen Bits werden mit Vorzeichenbits gefüllt, das heißt, positive Zahlen werden mit Nullen gefüllt, und negative Zahlen werden mit 1 gefüllt
Wenn die Die Operanden der rechten Verschiebung sind Byte- und Kurztypen. Diese Typen werden automatisch zum Typ int erweitert.
Wenn der zu entfernende Wert beispielsweise eine negative Zahl ist, wird für jede Rechtsverschiebung 1 nach links hinzugefügt. Wenn der zu entfernende Wert eine positive Zahl ist, wird für jede Rechtsverschiebung 0 nach links hinzugefügt. Dies wird als Vorzeichenbiterweiterung (Reserviertes Vorzeichenbit) (Vorzeichenerweiterung) bezeichnet und dient dazu, das Vorzeichen negativer Zahlen beizubehalten, wenn Rechtsverschiebungsoperationen
ausgeführt werden.
3) Mathematische Bedeutung
Das Verschieben eines Bits nach rechts entspricht einer Division durch 2, und das Verschieben von n Bits nach rechts entspricht einer Division durch 2 hoch n.
11 >>2 (11 ist vom Typ int)
1) Die binäre Form von 11 ist: 0000 0000 0000 0000 0000 0000 0000 10112) Die letzten beiden Ziffern der niederwertigen Bits werden herausgeschoben, und da die Zahl positiv ist, werden die höherwertigen Bits mit Nullen aufgefüllt.
3) Das Endergebnis ist 0000 0000 0000 0000 0000 0000 0000 0010.
In Dezimalzahl umgerechnet ist 3.
35 >> 2 (35 ist ein int-Typ)
Konvertieren Sie 35 in Binärform: 0000 0000 0000 0000 0000 0000 0010 0011
Entfernen Sie die letzten beiden Ziffern der unteren Bits: 0000 0000 0000 0000 0000 0000 0000 1000
in Dezimalzahl umgewandelt: 8
5) Das Vorzeichen bleibt beim Verschieben nach rechts nicht erhalten
Zum Beispiel
public class HexByte {
public static public void main(String args[]) {
char hex[] = {
'8', '9', 'a', 'b', 'c', 'd', 'e ' , 'f''
};
byte b = (byte) 0xf1;
System.out.println("b = 0x" hex[(b >> 4) & 0x0f] hex [ b & 0x0f]);}}
(b >> 4) & 0x0f Operationsprozess:
Die binäre Form von b ist: 1111 0001
4 Ziffern werden herausgeschoben: 0000 1111
Bitweise UND-Verknüpfung: 0000 1111
in Dezimalform umgewandelt: 15
Der Operationsprozess von
b & 0x0f: Die binäre Form von
b ist: 1111 0001
Die binäre Form von 0x0f ist: 0000 1111
Bitweise UND-Verknüpfung: 0000 0001
In Dezimalzahl umwandeln Die Form ist: 1
Die Ausgabe dieses Programms ist also wie folgt:
b = 0xf1
3. Vorzeichenloser Rechtsverschiebungsoperator> >>
Das allgemeine Format lautet wie folgt:
Wert >>>
Anzahl gibt die Anzahl der Bits an, um die der Wert verschoben werden soll.
Denken Sie nur an eines zu den Regeln der vorzeichenlosen Rechtsverschiebung: Ignorieren Sie die Vorzeichenbiterweiterung und füllen Sie das höchste Bit mit 0.
Der vorzeichenlose Rechtsverschiebungsoperator>>> ist nur für 32-Bit und 64-Bit sinnvoll Werte