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