| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Unsigned_right_shift | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.
Der unsigned right shift (>>>)-Operator gibt eine Zahl zurck, deren binaere Darstellung das Bitmuster des ersten Operanden um die angegebene Anzahl von Bits nach rechts verschoben ist. berschssige Bits, die nach rechts verschoben werden, gehen verloren, und null Bits werden von links eingefgt. Diese Operation wird auch "Zero-Filling Right Shift" genannt, weil das Vorzeichenbit 0 wird, sodass die resultierende Zahl immer positiv ist. Der Unsigned Right Shift akzeptiert keine BigInt-Werte.
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
x >>> y
Im Gegensatz zu anderen arithmetischen und bitweisen Operatoren akzeptiert der Unsigned Right Shift-Operator keine BigInt-Werte. Dies liegt daran, dass er die am weitesten links stehenden Bits mit Nullen fllt, aber BigInts konzeptionell eine unendliche Anzahl von fhrenden Vorzeichenbits haben, sodass es kein "am weitesten links stehendes Bit" gibt, das mit Nullen gefllt werden knnte.
Der Operator arbeitet mit der Bitdarstellung des linken Operanden in Zweierkomplement. Betrachten Sie die 32-Bit-Binrdarstellungen der Dezimalzahlen (Basis 10) 9 und -9:
9 (base 10): 00000000000000000000000000001001 (base 2)
-9 (base 10): 11111111111111111111111111110111 (base 2)
Die Binrdarstellung im Zweierkomplement der negativen Dezimalzahl (Basis 10) -9 wird gebildet, indem alle Bits ihrer gegenteiligen Zahl invertiert werden, was 9 und 00000000000000000000000000001001 im Binrsystem entspricht, und 1 hinzugefgt wird.
In beiden Fllen wird das Vorzeichen der Binrzahl durch das am weitesten links stehende Bit angegeben: Fr die positive Dezimalzahl 9 ist das am weitesten links stehende Bit der Binrdarstellung 0, und fr die negative Dezimalzahl -9 ist das am weitesten links stehende Bit der Binrdarstellung 1.
Angesichts dieser Binrdarstellungen der Dezimalzahlen (Basis 10) 9 und -9:
Fr die positive Zahl 9 ergeben Zero-Fill Right Shift und Sign-Propagation Right Shift dasselbe Ergebnis: 9 >>> 2 ergibt 2, dasselbe 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 rechtstehende Bits, 01, abgeschnitten wurden und zwei Nullen von links eingefgt wurden.
Beachten Sie jedoch, was bei -9 passiert: -9 >> 2 (Sign-Propagation Right Shift) ergibt -3, aber -9 >>> 2 (Zero-Fill Right Shift) ergibt 1073741821:
-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 rechtstehende Bits, 11, abgeschnitten wurden. Bei -9 >> 2 (Sign-Propagation Right Shift) wurden zwei Kopien des am weitesten links stehenden Bits 1 von links eingefgt, was das negative Vorzeichen erhlt. Auf der anderen Seite wurden bei -9 >>> 2 (Zero-Fill Right Shift) stattdessen Nullen von links eingefgt, sodass das negative Vorzeichen der Zahl nicht erhalten bleibt, und das Ergebnis eine (groe) positive Zahl ist.
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 eine unsigned 32-Bit-Ganzzahl umgewandelt und dann modulo 32 genommen, sodass der tatschliche Verschiebungsversatz immer eine positive Ganzzahl zwischen 0 und 31 (einschlielich) ist. Zum Beispiel ist 100 >>> 32 dasselbe wie 100 >>> 0 (und ergibt 100), weil 32 modulo 32 gleich 0 ist.
9 >>> 2; // 2
-9 >>> 2; // 1073741821
Unsigned Right Shift funktioniert nicht mit BigInts.
9n >>> 2n; // TypeError: BigInts have no unsigned right shift, use >> instead
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-unsigned-right-shift-operator |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |