Alle Artikel

Bitweise Operationen: wie AND, OR und XOR auf Bit-Ebene funktionieren

In der Mikrocontroller-Programmierung — etwa bei einem Arduino oder STM32 — steuert ein einziges GPIO-Register oft acht oder mehr Pins gleichzeitig, jeder als ein Bit. Einen bestimmten Pin auf HIGH zu setzen, ohne die anderen zu beeinflussen, ist eine reine OR-Operation mit einer passenden Maske; ihn auszuschalten, eine AND-Operation mit der invertierten Maske.

AND, OR, XOR, NOT — die vier Grundoperationen

  • AND (&) — das Ergebnisbit ist nur dann 1, wenn beide Eingabebits 1 sind. Dient dazu, ein Bit gezielt auf 0 zu setzen, ohne die anderen zu verändern.
  • OR (|) — das Ergebnisbit ist 1, wenn mindestens eines der Eingabebits 1 ist. Dient dazu, ein Bit gezielt auf 1 zu setzen.
  • XOR (^) — das Ergebnisbit ist 1, wenn sich die Eingabebits unterscheiden; XOR zweimal mit demselben Wert angewendet ergibt das Original.
  • NOT (~) — invertiert jedes Bit einer Zahl.

Wie sich bitweises AND von logischem AND unterscheidet

Logisches AND (&& in den meisten Sprachen) arbeitet mit booleschen Werten als Ganzes und liefert true/false, während bitweises AND (&) jedes Bit zweier Zahlen einzeln verarbeitet und eine Zahl zurückgibt. Die Verwechslung der beiden ist eine häufige Fehlerquelle, besonders da beide in manchen Sprachen ohne Typfehler kompilieren.

Warum dieses Tool zum Zahlensystem-Konverter passt

Ein Registerwert von 18 im Dezimalsystem verrät auf den ersten Blick nichts darüber, welche Pins gesetzt sind — derselbe Wert als 0b10010 zeigt sofort, welche einzelnen Bits aktiv sind. Genau deshalb werden bitweise Operationen fast nie im Dezimalsystem durchdacht, sondern binär oder hexadezimal — der Zahlensystem-Konverter ist meist der Schritt davor, bevor AND/OR/XOR überhaupt visuell Sinn ergeben.

Wofür man das braucht

  • Eine Reihe boolescher Flags effizient in einer einzigen Zahl speichern und prüfen.
  • Low-Level-Code verstehen, der mit Netzwerkprotokollen oder binären Formaten arbeitet.
  • Berechnungen optimieren, bei denen bitweise Operationen schneller sind als normale Arithmetik.

Die Falle der Operator-Priorität

In den meisten Programmiersprachen haben die bitweisen Operatoren & und | eine niedrigere Priorität als Vergleichsoperatoren — daher wird ein Ausdruck wie if (a & b == c) tatsächlich als a & (b == c) ausgewertet, nicht wie vom Autor erwartet. Das ist eine der häufigsten Ursachen für schwer auffindbare Fehler beim Arbeiten mit Bitmasken, und der zuverlässigste Weg, dies zu vermeiden, ist, bitweise Operationen immer explizit in Klammern zu setzen.

Tool ausprobieren