Was eine Bitmaske ist
Eine Bitmaske ist eine Zahl, die wegen ihres Bitmusters und nicht wegen ihres Werts verwendet wird. Jede Bitposition steht für eine Ein/Aus-Option, sodass eine einzige Ganzzahl 8, 32 oder 64 Flags gleichzeitig halten kann. Berechtigungen (rwx), Datei-Öffnungsmodi, CPU-Feature-Bits, Netzmasken und Optionsmengen in fast jeder C-API sind Bitmasken.
Bit n hat den Wert 2ⁿ, eine Maske mit den gesetzten Bits 0, 2 und 7 ist also 1 + 4 + 128 = 133 = 0x85 = 1000 0101. Die Konstante im Code entsteht, indem man eine 1 an die Position schiebt: 1 << 7.
Eine Maske verwenden
| Ziel | So geht es |
|---|---|
| Prüfen, ob ein Flag gesetzt ist | (value & FLAG) != 0 |
| Prüfen, ob alle von mehreren Flags gesetzt sind | (value & MASK) == MASK |
| Ein Flag setzen | value |= FLAG |
| Ein Flag löschen | value &= ~FLAG |
| Ein Flag umschalten | value ^= FLAG |
| Ein Feld aus den Bits 4–7 extrahieren | (value >> 4) & 0xF |
| Eine Maske für die Bits lo..hi bauen | ((1 << (hi - lo + 1)) - 1) << lo |
Eine vorgegebene Maske lesen
Den Wert in Binär umrechnen und die Bits von rechts ab 0 nummerieren. Jede 1 ist ein gesetztes Flag. Das Tool oben tut das für jeden eingefügten Wert und zeigt die Positionen als kompakte Liste wie 0-2, 5, 7.
Beispiele
Fragen
Warum beginnen Bitpositionen bei 0?
Weil Bit n den Wert 2ⁿ hat und 2⁰ = 1 das rechteste Bit ist. Die Zählung ab 0 lässt die Arithmetik aufgehen: Schieben um n setzt eine 1 an Bit n.
Was ist der Unterschied zwischen Bitmaske und Bitfeld?
Eine Bitmaske ist die Zahl, mit der man AND oder OR verknüpft. Ein Bitfeld ist eine Gruppe benachbarter Bits in einem größeren Wert, die zusammen eine kleine Zahl speichern (etwa die Bits 4–7 mit einem Wert 0–15). Zum Lesen oder Schreiben eines Bitfelds verwendet man eine Maske und einen Shift.
Wie viele Flags passen in eine Ganzzahl?
Eines pro Bit: 8 in einem Byte, 32 in einem 32-Bit-Int, 64 in einem 64-Bit-Int. Wer mehr braucht, nimmt ein Array von Ganzzahlen oder einen eigenen Bitset-Typ.
Warum 1 << n statt der Zahl selbst?
Es dokumentiert, welches Bit gemeint ist, und kann nicht als andere Zweierpotenz vertippt werden. Compiler falten es zu einer Konstante, es kostet also nichts zur Laufzeit.
Behandelt das Tool 64-Bit-Masken korrekt?
Ja. Es rechnet mit Ganzzahlen beliebiger Genauigkeit, alle 64 Bit sind also exakt, einschließlich Bit 63.