Zum Inhalt springenSkip to content
Zahlenkodierungen

Bitweise Operatoren

Stellenweise Verknüpfung von Bitmustern: NOT, AND, OR, XOR, Linksshift, Rechtsshift.

Eingaben oben setzen und Berechnen drücken, dann wird die Schritt-für-Schritt-Rechnung angezeigt.

Funktionsweise und Bereich

Bitweise C-Operatoren arbeiten stellenweise auf Bitmustern, ohne diese als Zahlen zu interpretieren; jede Bit-Position wird unabhängig von den anderen verknüpft. Die Negation ~x kippt jedes Bit und entspricht auf 2-Komplement-Codes ~x = −x − 1. Das bitweise Und x & y liefert an jeder Position eine 1, wenn beide Eingaben 1 sind, und eignet sich zum Löschen einzelner Bits per Maske (x & ~(1 << k) löscht Bit k). Das bitweise Oder x | y liefert eine 1, wenn mindestens eine Eingabe 1 ist, und wird typischerweise zum Setzen von Bits verwendet (x | (1 << k)). Das exklusive Oder x ^ y liefert eine 1, wenn die Eingaben unterschiedlich sind, und dient zum Umschalten einzelner Bits oder zum XOR-Swap-Trick. Der Linksshift x << k schiebt das Bitmuster um k Stellen nach links, fügt rechts Nullen ein und schneidet die zuviel gewordenen Bits links ab; für unsigned entspricht das einer Multiplikation mit 2k, solange keine 1-Bits am oberen Rand abgeschnitten werden. Der Rechtsshift x >> k schiebt um k Stellen nach rechts, ergänzt vorne Nullen (bei unsigned) oder das Vorzeichenbit (bei signed, implementation-defined) und schneidet hinten ab; er entspricht der ganzzahligen Division durch 2k. Vorsicht beim Operator-Vorrang: & und | binden schwächer als ==, also gehört in Ausdrücken wie if ((x & MASK) == VAL) zwingend die Klammer um die Maskierung.

Wann verwenden?

Bitweise Operatoren sind in der hardwarenahen Programmierung allgegenwärtig: bei Mikrocontroller-Registern (etwa Pins als Ausgang setzen via DDRB |= (1 << PB5)), bei Bitmasken und Flag-Sets, bei schneller Multiplikation und Division durch Zweierpotenzen, beim Hashing per XOR-Mixing und in Embedded Systems mit knappem Speicher. Auch in Performance-kritischem Code dienen sie als Branch-freie Alternative zu if-else, eine umfassende Sammlung an Tricks findet sich unter https://graphics.stanford.edu/~seander/bithacks.html.