Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

13.4.2 Bitmasken

13.4.2 Bitmasken

Ein weiterer Aspekt ist, dass oft Masken übergeben werden sollen. Es handelt sich hierbei wieder um einfache Integer, welche aber durch Bitoperationen mehrere Werte bzw. Flags aufnehmen können. Ich hatte bereits über Bitfelder gesprochen, wobei ich aber keine richtigen Bitfelder gezeigt habe, sondern einen neuen Mechanismus gezeigt habe, welcher wesentlich komfortabler war. Jetzt kommen wir aber nicht mehr umher, dies nachzuholen.

Die große Frage also lautet, wie kann ich jedes der 32 Bit eines Integers einzeln abfragen und setzen? Die Antwort ist ganz einfach. Zum Lesen verwendet man eine AND Operation, zum Setzen eine OR Operation und zum Entfernen eine XOR Operation. Wie und warum das Funktioniert, sollen folgende Grafiken zeigen.

Bitweise Verknüpfung mit AND

Wie Sie sehen können, kann man mit dem "&" Operator eine bitweise Verknüpfung machen und nur wenn der kleinere Wert im größeren enthalten ist, erhält man als Ergebnis den kleineren Wert. Ansonsten bekommt man einen anderen. Da ein Flag meistens nur durch ein oder maximal 2 benachbarte Bits signalisiert wird, kann man getrost davon ausgehen, dass das Ergebnis der Operation 0 ist, wenn das Flag nicht enthalten ist. Beachten Sie, dass dieses einzelne "&" an dieser Stelle nichts mit dem Referenzierungsoperator zu tun hat und verwechseln Sie es bitte auch nicht mit dem Verknüpfungsoperator "&&", welcher bei Bedingungen zum Einsatz kommt.

Bitweise Verknüpfung mit OR

Den Operator "|" müssen Sie sich wie ein intelligentes Plus vorstellen. Sie können damit ein Flag zu einer Maske dazu addieren und falls es schon enthalten ist, stört das nicht weiter.

Bitweise Verknüpfung mit XOR

Mit dem "^" Operator können Sie wieder Flags von einer Maske entfernen, aber wie Sie sehen, müssen Sie aufpassen. Dieser Operator verhält sich wie ein Plus und ein Minus. Falls Sie also ein Flag entfernen wollen, was gar nicht gesetzt war, setzen Sie es. Bevor Sie diese Operation anwenden, müssen sie also mit "&" prüfen, ob es enthalten ist. Und falls Sie sich wundern, dass ich zu Beginn behauptet hatte, dass es in C kein XOR gibt, dann weiße ich Sie nochmal auf den Unterschied zwischen einem Bitoperator und einem Verknüpfungsoperator hin. In einer Bedingung kann man zwei Ausdrücke nicht mit XOR koppeln, aber bei Bitoperationen steht einem ein XOR zur Verfügung.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012