3.1 KiB
Bitmanipulation in 16-Bit-Zahlen
Ein einzelnes Bit in einer 16-Bit-Zahl wird über eine Maske angesprochen. Die Bitverschiebung erzeugt die Maske, die logische Operation entscheidet, was mit dem Zielbit passiert.
1. Die Maske: Bitverschiebung
1 << n schiebt die 1 um n Stellen nach links. Es entsteht eine Maske, bei der genau Bit n gesetzt ist.
1 0000 0000 0000 0001
1 << 1 0000 0000 0000 0010
1 << 2 0000 0000 0000 0100
1 << 3 0000 0000 0000 1000
1 << 7 0000 0000 1000 0000
1 << 15 1000 0000 0000 0000
- Bit 0 = niederwertigstes Bit (LSB, rechts)
- Bit 15 = höchstwertigstes Bit (MSB, links)
- Jede Verschiebung um 1 nach links entspricht einer Multiplikation mit 2 →
1 << nist 2ⁿ
2. Übersicht der Operationen
| Ziel | Operation | Ausdruck |
|---|---|---|
| Bit setzen | OR | zahl |= (1 << n) |
| Bit löschen | AND mit invertierter Maske | zahl &= ~(1 << n) |
| Bit abfragen | AND | if (zahl & (1 << n)) |
| Bit umschalten | XOR | zahl ^= (1 << n) |
3. Beispiele
Ausgangswert: zahl = 0000 0000 1010 0101 (0x00A5)
Bit: 15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
0 0 0 0 | 0 0 0 0 | 1 0 1 0 | 0 1 0 1
3.1 Bit setzen — OR (|)
zahl 0000 0000 1010 0101
1 << 3 0000 0000 0000 1000 |
-----
Ergebnis 0000 0000 1010 1101
^ neu 1
Wahrheitstabelle: 0|0=0, 0|1=1, 1|0=1, 1|1=1
→ Maske-0 lässt durch, Maske-1 erzwingt 1.
3.2 Bit löschen — AND mit ~ (& ~)
1 << 2 0000 0000 0000 0100
~(1 << 2) 1111 1111 1111 1011
zahl 0000 0000 1010 0101
~Maske 1111 1111 1111 1011 &
-----
Ergebnis 0000 0000 1010 0001
^ jetzt 0
Wahrheitstabelle: 1&1=1, 1&0=0, 0&x=0
→ Maske-1 lässt durch, Maske-0 erzwingt 0.
3.3 Bit abfragen — AND (&)
Bit 5 ist gesetzt:
zahl 0000 0000 1010 0101
1 << 5 0000 0000 0010 0000 &
-----
Ergebnis 0000 0000 0010 0000 != 0 -> Bit ist gesetzt
Bit 4 ist nicht gesetzt:
zahl 0000 0000 1010 0101
1 << 4 0000 0000 0001 0000 &
-----
Ergebnis 0000 0000 0000 0000 == 0 -> Bit ist nicht gesetzt
3.4 Bit umschalten — XOR (^)
zahl 0000 0000 1010 0101
1 << 0 0000 0000 0000 0001 ^
-----
Ergebnis 0000 0000 1010 0100
^ 1 -> 0
Dieselbe Operation nochmal stellt den Ausgangswert wieder her:
0000 0000 1010 0100
0000 0000 0000 0001 ^
-----
0000 0000 1010 0101 -> Ausgangswert
Wahrheitstabelle: 0^0=0, 0^1=1, 1^0=1, 1^1=0
→ Maske-0 lässt durch, Maske-1 kippt.
4. Merksatz
Die Verschiebung baut die Maske, die logische Operation bestimmt die Wirkung: OR zum Setzen, AND-mit-
~zum Löschen, AND zum Prüfen, XOR zum Umschalten.