Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Linksverschiebung (<<)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
DerLinksverschiebungsoperator (<<) gibt eine Zahl oder einen BigInt zurück, deren Binärdarstellung der ersten Operanden um die angegebene Anzahl von Bits nach links verschoben ist. Überzählige Bits, die nach links verschoben werden, werden verworfen, und null Bits werden von rechts eingeführt.
In diesem Artikel
Probieren Sie es aus
const a = 5; // 00000000000000000000000000000101const b = 2; // 00000000000000000000000000000010console.log(a << b); // 00000000000000000000000000010100// Expected output: 20Syntax
x << yBeschreibung
Der<<-Operator ist für zwei Typen von Operanden überladen: Zahl undBigInt. Für Zahlen gibt der Operator einen 32-Bit-Integer zurück. Für BigInts gibt der Operator einen BigInt zurück. Ersetzt zuerst beide Operanden auf numerische Werte um und prüft dann die Typen der Operanden. Führt BigInt-Linksverschiebung aus, wenn beide Operanden BigInts werden; andernfalls werden beide Operanden in32-Bit-Integer umgewandelt und die Zahl wird links verschoben. EinTypeError wird ausgelöst, wenn ein Operand zu einem BigInt wird, aber der andere zu einer Zahl.
Der Operator arbeitet auf der Bitdarstellung des linken Operanden inZweierkomplement. Zum Beispiel ergibt9 << 2 36:
9 (base 10): 00000000000000000000000000001001 (base 2) --------------------------------9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10)
Bitweises Verschieben eines 32-Bit-Integerx nach links umy Bits ergibtx * 2 ** y. Beispielsweise ist9 << 3 äquivalent zu9 * (2 ** 3) = 9 * (8) = 72.
Wenn der linke Operand eine Zahl mit mehr als 32 Bits ist, werden die höchstwertigen Bits verworfen. Zum Beispiel wird der folgende Integer mit mehr als 32 Bits in einen 32-Bit-Integer umgewandelt:
Before: 11100110111110100000000000000110000000000001After: 10100000000000000110000000000001
Der rechte Operand wird in einen unsignierten 32-Bit-Integer umgewandelt und dann modulo 32 genommen, sodass der tatsächliche Verschiebungswert immer eine positive Ganzzahl zwischen 0 und 31, einschließlich, ist. Zum Beispiel ist100 << 32 dasselbe wie100 << 0 (und ergibt100), weil 32 modulo 32 gleich 0 ist.
Warnung:Sie könnten Leute sehen, die<< 0 verwenden, um Zahlen auf Ganzzahlen zu kürzen. Das Linksverschieben einer beliebigen Zahlx um0 gibtx zurück, umgewandelt in einen 32-Bit-Integer, was zusätzlich führende Bits für Zahlen außerhalb des Bereichs von -2147483648 bis 2147483647 entfernt. Verwenden Sie stattdessenMath.trunc().
Für BigInts gibt es keine Kürzung. Konzeptuell verstehen Sie positive BigInts als unendlich viele führende0-Bits und negative BigInts als unendlich viele führende1-Bits.
Beispiele
>Verwendung der Linksverschiebung
9 << 3; // 72// 9 * (2 ** 3) = 9 * (8) = 729n << 3n; // 72nSpezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-left-shift-operator> |