Heim Java javaLernprogramm Javas clevere Methode zur Verschiebungsoperation

Javas clevere Methode zur Verschiebungsoperation

Dec 16, 2016 pm 05:05 PM

Linksverschiebungsvorgang: Compiler-Ausführungsschritte:

1) Wenn x vom Typ Byte, Short, Char ist, stufen Sie x in int um.

2) Wenn x vom Typ Byte ist, short, char, int , dann wird n neu zugewiesen (der Prozess ist: Nehmen Sie die unteren 5 Bits des Komplements von n und konvertieren Sie sie in einen dezimalen int-Wert, was der Annahme von n Modulo 32 entspricht: n=n%32);

Wenn x ein langer Typ ist, wird n neu zugewiesen (der Vorgang ist: Nehmen Sie die unteren 6 Bits des n-Komplements und konvertieren Sie sie in einen dezimalen Ganzzahlwert, was der Verwendung von n Modulo 64 entspricht: n=n %64);

( Da der int-Typ 4 Bytes, also 32 Bits, ist, macht das Verschieben von 32 Bits keinen Sinn. Für lange Zeit ist es Modulo 64)

3) Verschiebung x um n Stellen nach links, und der gesamte Ausdruck erzeugt einen neuen Wert (der Wert von x bleibt unverändert).

<< ist ein Linksverschiebungssymbol, Spalte >

>> ist ein Rechtsverschiebungssymbol mit einem Vorzeichenbit. x>>1 bedeutet, dass sich der Inhalt von nicht ändert. >1 bedeutet, dass der Inhalt der Änderung)

Ergänzende Anweisungen:

Java-Code

Ausgabe

1 2 4 8 16 32 64 128

Ausgabe
// 左移: 向左移动,右边补0   
for (int i = 0;i < 8 ;i++)   
System.out.print( (1 << i) + " ");
Nach dem Login kopieren

40000000 20000000 10000000 8000000 4000000 2000000 1000000. 800000

Ausgabe
// 右移: 向右移动,如果符号位(int型为32位)为0,左边补0,符号位为1,左边补1   
// 符号位为1的右移   
for (int i = 0;i < 8 ;i++)   
System.out.print( Integer.toHexString(0x40000000 >> i) + " ");
Nach dem Login kopieren

800000 00 c0000000 e0000000 f0000000 f8000000 fc000000 fe000000 ff000000

Allgemeines oben Die Regel ist nicht falsch, aber es gibt eine Grenze. Für den Typ int darf die Anzahl der verschobenen Ziffern 32 nicht überschreiten, und für den Typ long darf die Anzahl der verschobenen Ziffern 64 nicht überschreiten. Führen Sie nun den folgenden Test durch:

 // 符号位为1的右移   
// 最高4位为1000, 右移1位,变成1100也就是c,   
for (int i = 0;i < 8 ;i++)   
System.out.print( Integer.toHexString(0x80000000 >> i) + " ");
Nach dem Login kopieren
Java-Code

0x80000000 Nach der Verschiebung um 31 Bits nach rechts wird jedes Bit zu 1 (d. h. -1). nach rechts verschieben Natürlich sind 32 Bit immer noch -1, aber nach der Verschiebung um 32 Bit nach rechts ist das Ergebnis die Zahl selbst.

Durch das Testen der Links- und Rechtsverschiebungen von Daten vom Typ int und long haben wir Folgendes herausgefunden:

Java verarbeitet zuerst die Verschiebungsoperation „a <<||>> b“. .b Mod 32||64-Operation, wenn a vom Typ int ist, nehmen Sie Mod 32, wenn a vom Typ double ist, nehmen Sie Mod 64 und verwenden Sie dann die oben genannten allgemeinen Verschiebungsoperationsregeln zum Verschieben.

System.out.println(Integer.toHexString(0x80000000 >> 31));   
// output: ffffffff   
System.out.println(Integer.toHexString(0x80000000 >> 32));   
// output: 80000000
Nach dem Login kopieren
An diesem Punkt können Sie verstehen, warum es die Anweisung

in der BitSet-Klasse gibt, denn Programmierer, die mit jdk vertraut sind, wissen, dass dann 1L << % 64) Es ist für JDK überflüssig.

Weitere Artikel zu Javas cleveren Methoden zur Verschiebungsoperation finden Sie auf der chinesischen PHP-Website!
1L << bitIndex
Nach dem Login kopieren
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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Apr 19, 2025 pm 04:51 PM

Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct? Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct? Apr 19, 2025 pm 06:21 PM

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Wie kann ich elegante Entitätsklassenvariablennamen erhalten, um Datenbankabfragebedingungen zu erstellen? Wie kann ich elegante Entitätsklassenvariablennamen erhalten, um Datenbankabfragebedingungen zu erstellen? Apr 19, 2025 pm 11:42 PM

Bei Verwendung von MyBatis-Plus oder anderen ORM-Frameworks für Datenbankvorgänge müssen häufig Abfragebedingungen basierend auf dem Attributnamen der Entitätsklasse erstellt werden. Wenn Sie jedes Mal manuell ...

Wie identifiziert Intellij IDEA die Portnummer eines Spring -Boot -Projekts, ohne ein Protokoll auszugeben? Wie identifiziert Intellij IDEA die Portnummer eines Spring -Boot -Projekts, ohne ein Protokoll auszugeben? Apr 19, 2025 pm 11:45 PM

Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Wie konvertiere ich Namen in Zahlen, um die Sortierung zu implementieren und die Konsistenz in Gruppen aufrechtzuerhalten? Wie konvertiere ich Namen in Zahlen, um die Sortierung zu implementieren und die Konsistenz in Gruppen aufrechtzuerhalten? Apr 19, 2025 pm 11:30 PM

Lösungen zum Umwandeln von Namen in Zahlen zur Implementierung der Sortierung in vielen Anwendungsszenarien müssen Benutzer möglicherweise in Gruppen sortieren, insbesondere in einem ...

Wie kann ich Java -Objekte sicher in Arrays umwandeln? Wie kann ich Java -Objekte sicher in Arrays umwandeln? Apr 19, 2025 pm 11:33 PM

Konvertierung von Java-Objekten und -Arrays: Eingehende Diskussion der Risiken und korrekten Methoden zur Konvertierung des Guss-Typs Viele Java-Anfänger werden auf die Umwandlung eines Objekts in ein Array stoßen ...

Wie verwendet ich die Redis -Cache -Lösung, um die Anforderungen der Produktranking -Liste effizient zu erkennen? Wie verwendet ich die Redis -Cache -Lösung, um die Anforderungen der Produktranking -Liste effizient zu erkennen? Apr 19, 2025 pm 11:36 PM

Wie erkennt die Redis -Caching -Lösung die Anforderungen der Produktranking -Liste? Während des Entwicklungsprozesses müssen wir uns häufig mit den Anforderungen der Ranglisten befassen, z. B. das Anzeigen eines ...

Wie konvertieren Sie Namen in Zahlen, um Sortieren innerhalb von Gruppen zu implementieren? Wie konvertieren Sie Namen in Zahlen, um Sortieren innerhalb von Gruppen zu implementieren? Apr 19, 2025 pm 01:57 PM

Wie konvertieren Sie Namen in Zahlen, um Sortieren innerhalb von Gruppen zu implementieren? Bei der Sortierung von Benutzern in Gruppen ist es häufig erforderlich, den Namen des Benutzers in Zahlen umzuwandeln, damit er anders sein kann ...

See all articles