bitweise Kombination: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) (Die Seite wurde neu angelegt: Bitweise Kombination wird benutzt um mehrere Eigenschaften in einem Bitstring zu codieren. Meistens werden Zahlen bitweise kombiniert, dieses Verfahren ist aber prinzip...) |
I0n0s (Diskussion | Beiträge) (Rechtschreibung + Entschlüsseln) |
||
Zeile 7: | Zeile 7: | ||
Praktisch bedeutet dies, dass jede Bitposition eine gewisse Bedeutung repräsentiert. | 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 | + | 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== | ==Anwendung== | ||
− | Vielfach wird dieses Verfahren bei prozeduralen APIs verwendet um komplexe Rückgabewerte zu kodieren. Beispielsweise bei | + | Vielfach wird dieses Verfahren bei prozeduralen APIs verwendet um komplexe Rückgabewerte zu kodieren. Beispielsweise bei [[SDL]]. |
==Beispiel== | ==Beispiel== | ||
Zeile 34: | Zeile 34: | ||
|} | |} | ||
− | Die | + | Die Verknüpfung von Zahl 1 und Zahl 2 ergibt: |
0000 0001 | 0000 0001 | ||
0000 0100 | 0000 0100 | ||
Zeile 40: | Zeile 40: | ||
0000 0101 -> Entspricht dem Dezimalwert 5 | 0000 0101 -> Entspricht dem Dezimalwert 5 | ||
− | Die | + | Die Verknüpfung von Zahl 1, Zahl 2 und Zahl 3 ergibt: |
0000 0001 | 0000 0001 | ||
0000 0100 | 0000 0100 | ||
Zeile 64: | Zeile 64: | ||
--------- | --------- | ||
1111 1111 | 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. |
Aktuelle Version vom 2. Januar 2009, 13:48 Uhr
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.