Rechtsschiebung (>>)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Der Rechtsschiebungsoperator (>>
) gibt eine Zahl oder einen BigInt
zurück, deren binäre Darstellung der des ersten Operanden entspricht, verschoben um die angegebene Anzahl von Bits nach rechts. Überschüssige Bits, die nach rechts verschoben werden, werden verworfen, und Kopien des äußersten linken Bits werden von links eingefügt. Dieser Vorgang wird auch "vorzeichenbewahrende Rechtsschiebung" oder "arithmetische Rechtsschiebung" genannt, da das Vorzeichen der resultierenden Zahl das gleiche wie das Vorzeichen des ersten Operanden ist.
Probieren Sie es aus
const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010
const c = -5; // 11111111111111111111111111111011
console.log(a >> b); // 00000000000000000000000000000001
// Expected output: 1
console.log(c >> b); // 11111111111111111111111111111110
// Expected output: -2
Syntax
x >> y
Beschreibung
Der Operator >>
ist für zwei Typen von Operanden überladen: Zahl und BigInt. Für Zahlen gibt der Operator einen 32-Bit-Integer zurück. Für BigInts
gibt der Operator einen BigInt
zurück. Zunächst werden beide Operanden in numerische Werte umgewandelt und ihre Typen überprüft. Die Rechte-Schiebung für BigInt
wird durchgeführt, wenn beide Operanden zu BigInt
werden; andernfalls werden beide Operanden in 32-Bit-Integer umgewandelt, und die Rechtsschiebung für Zahlen wird durchgeführt. Ein TypeError
wird ausgelöst, wenn ein Operand zu einem BigInt
wird, der andere jedoch zu einer Zahl.
Da das neue äußerste linke Bit den gleichen Wert wie das vorherige äußerste linke Bit hat, ändert sich das Vorzeichenbit (das äußerste linke Bit) nicht. Daher der Name "vorzeichenbewahrend".
Der Operator arbeitet auf der Bit-Darstellung des linken Operanden in Zweierkomplement. Betrachten Sie die 32-Bit-binären Darstellungen der Dezimalzahlen (Basis 10) 9
und -9
:
9 (base 10): 00000000000000000000000000001001 (base 2) -9 (base 10): 11111111111111111111111111110111 (base 2)
Die Binärdarstellung im Zweierkomplement der negativen Dezimalzahl -9
wird gebildet, indem alle Bits der Zahl mit entgegengesetztem Vorzeichen, die 9
ist (00000000000000000000000000001001
in Binär), invertiert und dann 1
addiert werden.
In beiden Fällen wird das Vorzeichen der Binärzahl durch ihr äußerstes linkes Bit gegeben: Für die positive Dezimalzahl 9
ist das äußerste linke Bit der Binärdarstellung 0
, und für die negative Dezimalzahl -9
ist das äußerste linke Bit der Binärdarstellung 1
.
Angesichts dieser Binärdarstellungen der Dezimalzahlen (Basis 10) 9
und -9
:
9 >> 2
ergibt 2:
9 (base 10): 00000000000000000000000000001001 (base 2) -------------------------------- 9 >> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)
Beachten Sie, wie zwei äußerste rechte Bits, 01
, verschoben wurden, und zwei Kopien des äußersten linken Bits, 0
, von links eingefügt wurden.
-9 >> 2
ergibt -3
:
-9 (base 10): 11111111111111111111111111110111 (base 2) -------------------------------- -9 >> 2 (base 10): 11111111111111111111111111111101 (base 2) = -3 (base 10)
Beachten Sie, wie zwei äußerste rechte Bits, 11
, verschoben wurden. Was jedoch die äußersten linken Bits betrifft: In diesem Fall ist das äußerste linke Bit 1
. Es wurden also zwei Kopien dieses äußersten 1
-Bits von links eingefügt – was das negative Vorzeichen beibehält.
Die Binärdarstellung 11111111111111111111111111111101
entspricht der negativen Dezimalzahl (Basis 10) -3
, da alle negativen Ganzzahlen im Zweierkomplement gespeichert werden. Diese kann berechnet werden, indem alle Bits der Binärdarstellung der positiven Dezimalzahl (Basis 10) 3
(00000000000000000000000000000011
) invertiert und dann eins addiert werden.
Wenn der linke Operand eine Zahl mit mehr als 32 Bits ist, werden die bedeutendsten Bits verworfen. Zum Beispiel wird die folgende Ganzzahl mit mehr als 32 Bits in eine 32-Bit-Ganzzahl umgewandelt:
Before: 11100110111110100000000000000110000000000001 After: 10100000000000000110000000000001
Der rechte Operand wird in einen vorzeichenlosen 32-Bit-Integer umgewandelt und dann modulo 32 genommen, sodass der tatsächliche Verschiebungswert immer eine positive ganze Zahl zwischen 0 und 31 (einschließlich) ist. Zum Beispiel ist 100 >> 32
dasselbe wie 100 >> 0
(und ergibt 100
), da 32 modulo 32 gleich 0 ist.
Für BigInts
gibt es keine Trunkierung. Konzeptuell können Sie positive BigInts
als eine unendliche Anzahl führender 0
-Bits und negative BigInts
als eine unendliche Anzahl führender 1
-Bits verstehen.
Das Rechtsschieben einer beliebigen Zahl x
um 0
ergibt x
, umgewandelt in einen 32-Bit-Integer. Vermeiden Sie es, >> 0
zu verwenden, um Zahlen auf Ganzzahlen zu kürzen; verwenden Sie stattdessen Math.trunc()
.
Beispiele
Verwendung der Rechtsschiebung
9 >> 2; // 2
-9 >> 2; // -3
9n >> 2n; // 2n
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-signed-right-shift-operator |
Browser-Kompatibilität
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bitwise right shift ( a >> b ) |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support