Start · Sprachen · JavaScript · Referenz · Rechtsschiebung (>>)

Rechtsschiebung (>>)

Operator

Der Rechtsschiebeoperator <code>&gt;&gt;</code> verschiebt die binäre Darstellung eines Wertes um die angegebene Anzahl von Bits nach rechts (vorzeichenbehaftet).

seit JavaScript ES1 Kategorie: syntax

Signatur

a >> b

Beschreibung

Der Rechtsschiebeoperator (>>) ist ein bitweiser Operator, der die Binärdarstellung des linken Operanden um die durch den rechten Operanden angegebene Anzahl von Bits nach rechts verschiebt. Überschüssige Bits auf der rechten Seite werden verworfen; auf der linken Seite wird das Vorzeichen-Bit (höchstwertiges Bit) beibehalten und nach links nachgezogen. Dieses Verhalten wird als arithmetische oder vorzeichenerhaltende Rechtsschiebung bezeichnet.

Für positive Zahlen entspricht eine Rechtsschiebung um n Stellen einer Division durch 2n, abgerundet auf die nächste ganze Zahl. Für negative Zahlen bleibt das Vorzeichen erhalten, da das Vorzeichenbit repliziert wird – im Gegensatz zum vorzeichenlosen Rechtsschiebeoperator >>>, der stets Nullen von links nachzieht.

Beide Operanden werden vor der Operation in vorzeichenbehaftete 32-Bit-Ganzzahlen (Int32) umgewandelt, es sei denn, es handelt sich um BigInt-Werte. Der rechte Operand wird dabei modulo 32 genommen, sodass Verschiebungen um 32 oder mehr Bits auf den Bereich 0–31 begrenzt bleiben. Bei BigInt-Operanden gibt es keine Begrenzung auf 32 Bit und keine Modulo-Reduktion des Schiebewertes.

Typische Anwendungsfälle sind schnelle Ganzzahldivisionen durch Potenzen von 2, das Extrahieren von Bit-Feldern aus gepackten Werten sowie Low-Level-Datenverarbeitung wie Farb- oder Protokoll-Parsing.

Parameter

Name Typ Default Beschreibung
$a Pflicht number | bigint Der zu verschiebende Wert (linker Operand). Wird in eine vorzeichenbehaftete 32-Bit-Ganzzahl umgewandelt, außer bei BigInt.
$b Pflicht number | bigint Anzahl der Bits, um die verschoben wird (rechter Operand). Bei number wird nur b % 32 verwendet; bei BigInt darf der Wert beliebig groß sein.

Rückgabewert

Typ
number | bigint
Beschreibung
Eine vorzeichenbehaftete 32-Bit-Ganzzahl (number) bzw. ein BigInt, deren Binärdarstellung um b Stellen nach rechts verschoben wurde.

Beispiele

Grundlegende Rechtsschiebung positiver Zahlen

// 20 in Binär: 0000 0000 0000 0000 0000 0000 0001 0100
console.log(20 >> 1);  // 10  → wie 20 / 2
console.log(20 >> 2);  // 5   → wie 20 / 4
console.log(20 >> 3);  // 2   → wie Math.floor(20 / 8)
console.log(1   >> 0); // 1   → keine Verschiebung
10 5 2 1

Rechtsschiebung negativer Zahlen (Vorzeichen bleibt erhalten)

// -8 in Binär (Zweierkomplement): 1111 1111 1111 1111 1111 1111 1111 1000
console.log(-8 >> 1);  // -4  → Vorzeichen-Bit wird repliziert
console.log(-8 >> 2);  // -2
console.log(-1 >> 5);  // -1  → alle Bits bleiben 1
-4 -2 -1

Farb-Kanal aus einem 32-Bit-RGBA-Wert extrahieren

// Gepackte Farbe: 0xRRGGBBAA
const rgba = 0xFF8040C0; // R=255, G=128, B=64, A=192

const r = (rgba >> 24) & 0xFF;
const g = (rgba >> 16) & 0xFF;
const b = (rgba >>  8) & 0xFF;
const a =  rgba        & 0xFF;

console.log(`R=${r}, G=${g}, B=${b}, A=${a}`);
R=255, G=128, B=64, A=192

Rechtsschiebung mit BigInt

const big = 1024n;
console.log(big >> 3n);   // 128n  → 1024 / 8
console.log(-16n >> 2n);  // -4n   → Vorzeichen bleibt erhalten
128n -4n

// Wichtig · Fallstricke

Vorzeichenbehaftet vs. vorzeichenlos: >> repliziert das Vorzeichen-Bit (arithmetische Schiebung). Wenn stets Nullen von links nachgezogen werden sollen (logische Schiebung), muss der vorzeichenlose Rechtsschiebeoperator >>> verwendet werden. >>> ist nicht für BigInt verfügbar.

32-Bit-Beschränkung: Nicht-BigInt-Operanden werden intern auf Int32 gekürzt. Zahlen außerhalb des Int32-Bereichs (±2 147 483 647) können dabei unerwartete Werte liefern. Z. B. ergibt 2147483648 >> 0 den Wert -2147483648, da das höchste Bit als Vorzeichen interpretiert wird.

Modulo-Verschiebung: a >> 32 entspricht a >> 0 (keine Verschiebung), da der rechte Operand modulo 32 gerechnet wird. Bei BigInt gilt diese Einschränkung nicht.

Zuweisung: Die kombinierende Schreibweise a >>= b ist equivalent zu a = a >> b und verändert a direkt.