bitweise Kombination

Aus DGL Wiki
Version vom 2. Januar 2009, 13:48 Uhr von I0n0s (Diskussion | Beiträge) (Rechtschreibung + Entschlüsseln)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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.

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.