Unsigned Right Shift (>>>)

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 Unsigned Right Shift (>>>)-Operator gibt eine Zahl zurück, deren binäre Darstellung durch Verschieben des ersten Operanden um die angegebene Anzahl von Bits nach rechts entsteht. Überzählige Bits, die nach rechts verschoben wurden, werden verworfen, und von der linken Seite werden Nullen eingefügt. Dieser Vorgang wird auch als "Zero-Filling Right Shift" bezeichnet, da das Vorzeichen-Bit zu 0 wird, wodurch das Ergebnis immer positiv ist. Der Unsigned Right Shift akzeptiert keine BigInt-Werte.

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); //  00111111111111111111111111111110
// Expected output: 1073741822

Syntax

js
x >>> y

Beschreibung

Im Gegensatz zu anderen arithmetischen und bitweisen Operatoren akzeptiert der Unsigned Right Shift-Operator keine BigInt-Werte. Das liegt daran, dass er die linkesten Bits mit Nullen auffüllt, aber konzeptionell haben BigInts eine unendliche Anzahl führender Vorzeichenbits, sodass es kein "linkestes Bit" gibt, das mit Nullen gefüllt werden könnte.

Der Operator arbeitet auf der Bitdarstellung des linken Operanden im Zweierkomplement. Betrachten Sie die 32-Bit-Binärdarstellungen der Dezimalzahlen (Basis 10) 9 und -9:

     9 (base 10): 00000000000000000000000000001001 (base 2)
    -9 (base 10): 11111111111111111111111111110111 (base 2)

Die Binärdarstellung der negativen Dezimalzahl (Basis 10) -9 im Zweierkomplement wird gebildet, indem alle Bits der gegenteiligen Zahl, nämlich 9 (00000000000000000000000000001001 im Binärsystem), invertiert und 1 hinzugefügt werden.

In beiden Fällen wird das Vorzeichen der Binärzahl durch ihr linkestes Bit angegeben: Bei der positiven Dezimalzahl 9 ist das linkeste Bit der Binärdarstellung 0, und bei der negativen Dezimalzahl -9 ist das linkeste Bit der Binärdarstellung 1.

Angesichts dieser Binärdarstellungen der Dezimalzahlen (Basis 10) 9 und -9:

Für die Zahl 9 (positiv) ergibt "Zero-Fill Right Shift" und der sign-propagating Right Shift dasselbe Ergebnis: 9 >>> 2 ergibt 2, genau wie 9 >> 2:

      9 (base 10): 00000000000000000000000000001001 (base 2)
                   --------------------------------
9 >>  2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)
9 >>> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)

Beachten Sie, wie zwei rechte Bits, 01, verschoben wurden und zwei Nullen von links eingefügt wurden.

Beachten Sie jedoch, was mit -9 passiert: -9 >> 2 (sign-propagating Right Shift) ergibt -3, während -9 >>> 2 (Zero-Fill Right Shift) 1073741821 ergibt:

      -9 (base 10): 11111111111111111111111111110111 (base 2)
                    --------------------------------
-9 >>  2 (base 10): 11111111111111111111111111111101 (base 2) = -3 (base 10)
-9 >>> 2 (base 10): 00111111111111111111111111111101 (base 2) = 1073741821 (base 10)

Beachten Sie, wie zwei rechte Bits, 11, verschoben wurden. Bei -9 >> 2 (sign-propagating Right Shift) wurden zwei Kopien des linken 1-Bits von links eingefügt, wodurch das negative Vorzeichen erhalten bleibt. Beim -9 >>> 2 (Zero-Fill Right Shift) wurden stattdessen Nullen von links eingefügt, sodass das negative Vorzeichen der Zahl nicht erhalten bleibt und das Ergebnis stattdessen eine (große) positive Zahl ist.

Wenn der linke Operand eine Zahl mit mehr als 32 Bits ist, werden die höchstwertigen 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 eine vorzeichenlose 32-Bit-Ganzzahl umgewandelt und dann modulo 32 genommen, sodass der tatsächliche Verschiebe-Offset immer eine positive Ganzzahl 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.

Beispiele

Verwendung des Unsigned Right Shift

js
9 >>> 2; // 2
-9 >>> 2; // 1073741821

Unsigned Right Shift funktioniert nicht mit BigInts.

js
9n >>> 2n; // TypeError: BigInts have no unsigned right shift, use >> instead

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-unsigned-right-shift-operator

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Bitwise unsigned right shift (a >>> b)

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch