diff --git a/Neu/bitoperationen-16bit.md b/Neu/bitoperationen-16bit.md new file mode 100644 index 0000000..5e4d177 --- /dev/null +++ b/Neu/bitoperationen-16bit.md @@ -0,0 +1,122 @@ +# 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.