Start · Sprachen · JavaScript · Referenz · Bitweises UND-Zuweisung (&=)

Bitweises UND-Zuweisung (&=)

Operator

Der bitweise UND-Zuweisungsoperator <code>&=</code> führt ein bitweises UND auf beide Operanden aus und weist das Ergebnis dem linken Operanden zu.

seit JavaScript ES1 Kategorie: syntax

Signatur

x &= y

Beschreibung

Der Operator &= ist eine verkürzte Schreibweise für x = x & y. Er kombiniert den bitweisen UND-Operator (&) mit einer Zuweisung: Beide Operanden werden in 32-Bit-Ganzzahlen (zwei's-Komplement) umgewandelt, jedes Bit-Paar wird mit dem logischen UND verknüpft, und das Ergebnis wird dem linken Operanden zugewiesen.

Das bitweise UND gibt für jede Bit-Position genau dann eine 1 zurück, wenn beide Bits an dieser Position den Wert 1 haben. Andernfalls ist das Ergebnis-Bit 0. Das macht &= besonders nützlich zum Maskieren von Bits, also zum gezielten Löschen oder Prüfen einzelner Bit-Flags in einem Ganzzahlwert.

Typische Anwendungsfälle sind Low-Level-Operationen wie die Arbeit mit Berechtigungs-Flags, Hardware-Registern, Farb-Kanälen in Pixelwerten oder performanzkritischer Datenverarbeitung. Auch das Erzwingen gerader Zahlen (letztes Bit auf 0 setzen) oder das Beschränken von Werten auf einen Zahlenbereich sind klassische Einsatzgebiete.

Nicht-ganzzahlige Operanden werden vor der Operation mittels ToInt32 in 32-Bit-Ganzzahlen umgewandelt. BigInt-Werte werden ebenfalls unterstützt, dürfen jedoch nicht mit regulären Zahlen gemischt werden.

Parameter

Name Typ Default Beschreibung
$x Pflicht number | bigint Der linke Operand, dem das Ergebnis der bitweisen UND-Operation zugewiesen wird. Muss ein gültiges Zuweisungsziel (Variable, Objekt-Eigenschaft, Array-Element) sein.
$y Pflicht number | bigint Der rechte Operand. Wird mit x bitweise per UND verknüpft.

Rückgabewert

Typ
number | bigint
Beschreibung
Das Ergebnis der bitweisen UND-Operation von x und y — eine 32-Bit-Ganzzahl (oder BigInt), die gleichzeitig in x gespeichert wird.

Beispiele

Grundlegendes Beispiel — einzelne Bits maskieren

let a = 0b1101; // 13
a &= 0b1010;    // 10
console.log(a); // Ergebnis: 0b1000 = 8

let b = 15;     // 0b00001111
b &= 9;         // 0b00001001
console.log(b);
8 9

Gerade Zahl erzwingen (letztes Bit löschen)

let n = 7;     // ungerade
n &= ~1;       // Bit 0 auf 0 setzen  →  6
console.log(n);

let m = 42;    // bereits gerade
m &= ~1;
console.log(m);
6 42

Berechtigungs-Flags entfernen

const READ    = 0b0001; // 1
const WRITE   = 0b0010; // 2
const EXECUTE = 0b0100; // 4

let permissions = READ | WRITE | EXECUTE; // alle Rechte: 7
console.log('Vorher:', permissions.toString(2).padStart(4, '0'));

// WRITE-Recht entfernen (Bit per Komplement maskieren)
permissions &= ~WRITE;
console.log('Nachher:', permissions.toString(2).padStart(4, '0'));
console.log('Hat WRITE?', !!(permissions & WRITE));
Vorher: 0111 Nachher: 0101 Hat WRITE? false

Verwendung mit BigInt

let flags = 0b11111111n;
flags &= 0b00001111n;   // nur die unteren 4 Bits behalten
console.log(flags);
15n

// Wichtig · Fallstricke

Typumwandlung: Operanden vom Typ number werden intern per ToInt32 in 32-Bit-Ganzzahlen umgewandelt. Nachkommastellen, NaN, Infinity und -Infinity werden dabei zu 0. Das Ergebnis ist stets eine vorzeichenbehaftete 32-Bit-Ganzzahl im Bereich −2 147 483 648 bis 2 147 483 647.

BigInt-Einschränkung: BigInt-Werte dürfen nicht mit regulären number-Werten gemischt werden — dies führt zu einem TypeError.

Vorzeichenbit: Da 32-Bit-Ganzzahlen vorzeichenbehaftet sind, kann das Ergebnis bei großen Zahlen negativ erscheinen. Wer vorzeichenlose 32-Bit-Werte benötigt, kann mit >>> 0 (Zero-Fill-Right-Shift) konvertieren.

Nicht zu verwechseln mit dem logischen UND-Zuweisungsoperator &&=, der auf Wahrheitswerten arbeitet und keine bitweise Operation durchführt.