Left 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 Linksschiebeoperator (<<) gibt eine Zahl oder einen BigInt zurück, dessen binäre Darstellung das erste Operand ist, verschoben um die angegebene Anzahl von Bits nach links. Überzählige nach links verschobene Bits werden verworfen, und Nullbits werden von rechts eingeschoben.

Probieren Sie es aus

const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010

console.log(a << b); // 00000000000000000000000000010100
// Expected output: 20

Syntax

js
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 wandelt er beide Operanden in numerische Werte um und testet deren Typen. Er führt eine BigInt-Linksschiebung aus, wenn beide Operanden zu BigInts werden; andernfalls konvertiert er beide Operanden in 32-Bit-Integer und führt eine Zahl-Linksschiebung aus. Ein TypeError wird ausgelöst, wenn ein Operand zu einem BigInt wird, der andere jedoch zu einer Zahl.

Der Operator arbeitet mit der Bit-Repräsentation des linken Operanden im Zweierkomplement. Zum Beispiel ergibt 9 << 2 den Wert 36:

     9 (base 10): 00000000000000000000000000001001 (base 2)
                  --------------------------------
9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10)

Bitweise Verschiebung eines 32-Bit-Integer x nach links um y Bits ergibt x * 2 ** y. Beispielsweise ist 9 << 3 äquivalent zu 9 * (2 ** 3) = 9 * (8) = 72.

Wenn der linke Operand eine Zahl mit mehr als 32 Bits ist, werden die bedeutendsten Bits verworfen. Zum Beispiel wird der folgende Integer mit mehr als 32 Bits in einen 32-Bit-Integer konvertiert:

Before: 11100110111110100000000000000110000000000001
After:              10100000000000000110000000000001

Der rechte Operand wird in einen unsignierten 32-Bit-Integer konvertiert und dann modulo 32 genommen, sodass der tatsächliche Verschiebungsversatz immer eine positive Ganzzahl zwischen 0 und 31 (einschließlich) ist. Beispielsweise ist 100 << 32 dasselbe wie 100 << 0 (und ergibt 100), weil 32 modulo 32 null ist.

Warnung: Sie könnten sehen, wie Leute << 0 verwenden, um Zahlen zu Ganzzahlen zu verkürzen. Das Linksschieben einer beliebigen Zahl x um 0 gibt x in einen 32-Bit-Integer konvertiert zurück, was zusätzlich führende Bits für Zahlen außerhalb des Bereichs -2147483648 bis 2147483647 entfernt. Verwenden Sie stattdessen Math.trunc().

Bei BigInts gibt es keine Verkürzung. Konzeptuell kann man sich positive BigInts als eine unendliche Anzahl führender 0-Bits vorstellen und negative BigInts als eine unendliche Anzahl führender 1-Bits.

Beispiele

Verwendung des Linksschiebeoperators

js
9 << 3; // 72

// 9 * (2 ** 3) = 9 * (8) = 72

9n << 3n; // 72n

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-left-shift-operator

Browser-Kompatibilität

Siehe auch