Heim  >  Artikel  >  Java  >  Javas clevere Methode zur Verschiebungsoperation

Javas clevere Methode zur Verschiebungsoperation

高洛峰
高洛峰Original
2016-12-16 17:05:551546Durchsuche

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

8d6f76fc0020843d9bf1df5c47c996cf> 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) + " ");

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) + " ");

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) + " ");
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 d97d3819c7ea187b03d9b2a6e554e3c4> 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
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
Stellungnahme:
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
Vorheriger Artikel:JAVA-SchichtoperatorNächster Artikel:JAVA-Schichtoperator