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
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
9 << 3; // 72
// 9 * (2 ** 3) = 9 * (8) = 72
9n << 3n; // 72n
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-left-shift-operator |