bitweise Kombination
Bitweise Kombination wird benutzt um mehrere Eigenschaften in einem Bitstring zu codieren. Meistens werden Zahlen bitweise kombiniert, dieses Verfahren ist aber prinzipiell mit allen Datentypen möglich, da alle als Bitstring im Speicher abgelegt werden.
Inhaltsverzeichnis
Verfahren
Bei der bitweisen Kombination werden die Bitstrings der Eingaben bitweise OR verknüpft. Als Ergebnis erhält man wiederum einen Bitstring.
Praktisch bedeutet dies, dass jede Bitposition eine gewisse Bedeutung repräsentiert. Wenn Bit 1 z.B. anzeigt ob es Tag oder Nacht ist, und Bit 2. ob es Kalt oder Warm ist, kann durch die Kombination beider z.B. eine kalte Nacht abgebildet werden.
Anwendung
Vielfach wird dieses Verfahren bei prozeduralen APIs verwendet um komplexe Rückgabewerte zu kodieren. Beispielsweise bei SDL.
Beispiel
Wir haben 3 Zahlen die wir verknüpfen wollen:
Zahlenwert | Bitstring | |
---|---|---|
1. Zahl | 1 | 0000 0001 |
2. Zahl | 4 | 0000 0100 |
3. Zahl | 9 | 0000 1001 |
Die Verknüpfung von Zahl 1 und Zahl 2 ergibt:
0000 0001 0000 0100 --------- 0000 0101 -> Entspricht dem Dezimalwert 5
Die Verknüpfung von Zahl 1, Zahl 2 und Zahl 3 ergibt:
0000 0001 0000 0100 0000 1001 --------- 0000 1101 -> Entspricht dem Dezimalwert 13
Verknüpft man eine Zahl mit sich selbst, ändert sie sich nicht:
0000 0001 0000 0001 --------- 0000 0001
Verknüpft man eine Zahl mit 0 ist das Ergebnis gleich der anderen Zahl.
0000 0101 0000 0000 --------- 0000 0101
Verknüpft man eine Zahl mit MAX ist das Ergebnis gleich MAX.
0000 0101 1111 1111 (MAX = größtmöglicher Wert) --------- 1111 1111
Entschlüsselung
Zur Überprüfung welche Bits gesetzt werden, wird der Wert mit einer Maske bitweise AND verknüpft. Um Herauszufinden ob gerade Nacht ist vergleicht man das Resultat mit der Maske.
xxxx xxxx (unbekannte Zahl) 0000 0001 (Maske) --------- (AND-Verknüpfung) 0000 000x
Das Resultat ist entweder 0 falls Tag ist oder 1 (also die Maske) falls es Nacht ist.