# 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 << n` ist **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.