Start · Sprachen · JavaScript · Referenz · Bitweises OR (|)

Bitweises OR (|)

Operator

Der bitweise OR-Operator <code>|</code> vergleicht zwei Operanden bitweise und liefert eine Zahl (oder BigInt), bei der jedes Bit <code>1</code> ist, wenn mindestens einer der Operanden an dieser Bitposition eine <code>1</code> hat.

seit JavaScript ES1 Kategorie: syntax

Signatur

a | b

Beschreibung

Der bitweise OR-Operator (|) arbeitet auf der binären Darstellung seiner Operanden. Für jedes Bit-Paar gilt: Das Ergebnisbit ist 1, wenn mindestens eines der beiden Bits 1 ist — andernfalls ist es 0. Die Wahrheitstabelle lautet: 0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1.

Beide Operanden werden zunächst in vorzeichenbehaftete 32-Bit-Ganzzahlen (Int32) umgewandelt. Das Ergebnis ist ebenfalls eine Int32-Zahl und wird anschließend wieder in einen normalen JavaScript-Number-Wert konvertiert. Für BigInt-Operanden entfällt die 32-Bit-Begrenzung — beide Operanden müssen dann vom Typ BigInt sein, andernfalls wird ein TypeError geworfen.

Typische Einsatzgebiete sind das Setzen bestimmter Bits in einer Bitmaske, das Kombinieren von Flags sowie einfache Ganzzahl-Tricks (z. B. schnelles Abschneiden von Nachkommastellen via x | 0). In modernem Code werden bitweise Operatoren hauptsächlich bei Low-Level-Datenverarbeitung, Grafikprogrammierung, Protokollimplementierungen oder Performance-kritischen Operationen eingesetzt.

Der Operator darf nicht mit dem logischen OR-Operator (||) verwechselt werden: || arbeitet auf Wahrheitswerten und gibt einen der beiden Operanden zurück, während | immer eine bitweise Integer-Operation durchführt und eine Zahl zurückliefert.

Parameter

Name Typ Default Beschreibung
$a Pflicht number | bigint Der linke Operand. Wird bei number in eine vorzeichenbehaftete 32-Bit-Ganzzahl umgewandelt.
$b Pflicht number | bigint Der rechte Operand. Wird bei number in eine vorzeichenbehaftete 32-Bit-Ganzzahl umgewandelt. Muss denselben Typ wie a haben, wenn a ein BigInt ist.

Rückgabewert

Typ
number | bigint
Beschreibung
Eine vorzeichenbehaftete 32-Bit-Ganzzahl (als number) bzw. ein BigInt, deren Bits an jeder Position 1 sind, wenn mindestens einer der Operanden an dieser Position eine 1 hatte.

Beispiele

Grundlegendes Beispiel mit binären Werten

// 0b1010 =  10
// 0b0110 =   6
// 0b1110 =  14  (jede Position, an der mind. ein Bit gesetzt ist)
const a = 0b1010; // 10
const b = 0b0110; //  6
const result = a | b;
console.log(result.toString(2)); // "1110"
console.log(result);             // 14
1110 14

Flags mit Bitmasken setzen und kombinieren

// Berechtigungen als Bitmasken
const READ    = 0b001; // 1
const WRITE   = 0b010; // 2
const EXECUTE = 0b100; // 4

// Lese- und Schreibrecht kombinieren
const permissions = READ | WRITE;
console.log(permissions);          // 3  (0b011)

// Prüfen, ob ein bestimmtes Flag gesetzt ist
const canRead  = (permissions & READ)    !== 0;
const canExec  = (permissions & EXECUTE) !== 0;
console.log(canRead);  // true
console.log(canExec);  // false

// Nachträglich EXECUTE-Recht hinzufügen
const fullAccess = permissions | EXECUTE;
console.log(fullAccess); // 7  (0b111)
3 true false 7

Nachkommastellen abschneiden mit | 0

// x | 0 konvertiert x in eine Int32 — Nachkommastellen werden verworfen
const pi = 3.14159;
const floored = pi | 0;
console.log(floored); // 3

const negative = -7.9 | 0;
console.log(negative); // -7  (kein Math.floor — Richtung 0!)
3 -7

Bitweises OR mit BigInt

const x = 0b1010n; // BigInt
const y = 0b0101n; // BigInt
const result = x | y;
console.log(result);          // 15n
console.log(result.toString(2)); // "1111"
15n 1111

// Wichtig · Fallstricke

Automatische Typumwandlung: Nicht-numerische Werte (z. B. null, undefined, true, Strings) werden vor der Operation über ToInt32 in Zahlen umgewandelt. null | 0 ergibt 0, true | 0 ergibt 1. Dies kann zu schwer nachvollziehbarem Verhalten führen — explizite Typumwandlung ist empfehlenswert.

32-Bit-Grenze: Zahlen außerhalb des Int32-Bereichs (±2 147 483 647) werden vor der Operation abgeschnitten. 2**32 | 1 ergibt 1, da 2**32 als Int32 den Wert 0 hat. Für größere Ganzzahlen muss BigInt verwendet werden.

Nicht mit logischem OR (||) verwechseln: a || b gibt a zurück, falls a truthy ist, sonst ba | b führt immer eine bitweise Operation durch und gibt eine Zahl zurück.

BigInt-Mischung verboten: Das Kombinieren von number und BigInt (z. B. 5 | 2n) wirft einen TypeError.