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

Detaillierte Erklärung des Java-Shift-Operators

Dec 16, 2016 pm 05:00 PM

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Mar 17, 2025 pm 05:35 PM

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Mar 17, 2025 pm 05:44 PM

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Mar 17, 2025 pm 05:43 PM

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Mar 17, 2025 pm 05:46 PM

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement? Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement? Mar 17, 2025 pm 05:45 PM

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.

See all articles