Heim > Java > javaLernprogramm > Detaillierte Erklärung des Java-Shift-Operators

Detaillierte Erklärung des Java-Shift-Operators

高洛峰
Freigeben: 2016-12-16 17:00:18
Original
1673 Leute haben es durchsucht

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 <Anzahl gibt die Anzahl der Bits an, um die der Wert verschoben werden soll.
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.

3) Mathematische Bedeutung

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

4) Berechnungsprozess:

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.

Die Anzahl der verschobenen Bits überschreitet die maximale Anzahl von Bits für den Typ.

Wenn die Anzahl in höherwertige Bits (31 oder 63 Bits) verschoben wird, wird der Wert negativ. Das folgende Programm veranschaulicht dies:

// Linksverschiebung als schnelle Möglichkeit zur Multiplikation mit 2.

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 );
}
}
}

Die Ausgabe dieses Programms ist wie folgt: >Hinweis: n-Bit-Binärdatei, das höchste Bit ist das Vorzeichenbit, daher ist der dargestellte Zahlenbereich - 2^(n-1) - 2^(n-1) -1, also ist der Modul 2^(n-1).


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 >>

Anzahl gibt die Anzahl der Bits an, um die der Wert verschoben werden soll.

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.

4) Berechnungsprozess

11 >>2 (11 ist vom Typ int)

1) Die binäre Form von 11 ist: 0000 0000 0000 0000 0000 0000 0000 1011

2) 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

Der Wert nach dem Verschieben nach rechts wird bitweise UND mit 0x0f verknüpft, so dass jedes Vorzeichen vorhanden ist Das Bit wird erweitert, sodass der resultierende Wert als Index im definierenden Array verwendet werden kann, um das durch das entsprechende Array-Element dargestellte Hexadezimalzeichen zu erhalten.

Zum Beispiel
public class HexByte {
public static public void main(String args[]) {
char hex[] = {

'0', '1', '2' , '3', '4', '5', '6', '7',

'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



Ausführlichere Artikel zu Java-Shift-Operatoren finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage