Linksverschiebung (<<)
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 Linksverschiebungsoperator (<<
) gibt eine Zahl oder BigInt zurück, deren binäre Darstellung der ersten Operanden um die angegebene Anzahl von Bits nach links verschoben ist. Überzählige Bits, die nach links verschoben werden, werden verworfen, und von rechts werden Null-Bits eingefügt.
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 überlastet: number und BigInt. Für Zahlen gibt der Operator einen 32-Bit-Integer zurück. Für BigInts gibt der Operator ein BigInt zurück. Er erzwingt zuerst beide Operanden in numerische Werte zu konvertieren und überprüft die Typen von ihnen. Er führt eine BigInt-Linksverschiebung durch, wenn beide Operanden zu BigInts werden; andernfalls werden beide Operanden in 32-Bit-Integer konvertiert und eine Zahl-Linksverschiebung durchgeführt. Ein TypeError
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 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)
Bitweises Verschieben eines 32-Bit-Integer x
nach links um y
Bits ergibt x * 2 ** y
. Zum Beispiel ist 9 << 3
gleichbedeutend mit 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 umgewandelt:
Before: 11100110111110100000000000000110000000000001 After: 10100000000000000110000000000001
Der rechte Operand wird in einen vorzeichenlosen 32-Bit-Integer umgewandelt und dann modulo 32 genommen, sodass der tatsächliche Verschiebungsversatz immer eine positive ganze Zahl zwischen 0 und 31 (einschließlich) ist. Zum Beispiel entspricht 100 << 32
dem gleichen wie 100 << 0
(und ergibt 100
), weil 32 modulo 32 gleich 0 ist.
Für BigInts gibt es keine Verkürzung. Konzeptuell sollten positive BigInts als unendlich viele führende 0
-Bits verstanden werden und negative BigInts als unendlich viele führende 1
-Bits.
Das Linksverschieben einer beliebigen Zahl x
um 0
ergibt x
, konvertiert in einen 32-Bit-Integer. Verwenden Sie nicht << 0
, um Zahlen auf ganzzahlige Werte zu kürzen; verwenden Sie stattdessen Math.trunc()
.
Beispiele
Verwendung der Linksverschiebung
9 << 3; // 72
// 9 * (2 ** 3) = 9 * (8) = 72
9n << 3n; // 72n
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-left-shift-operator |