bitweise Kombination: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(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...)
 
(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 kalt oder Warm ist, kann durch die Kombination beider z.B. eine kalte Nacht abgebildet werden.
+
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 der SDL.
+
Vielfach wird dieses Verfahren bei prozeduralen APIs verwendet um komplexe Rückgabewerte zu kodieren. Beispielsweise bei [[SDL]].
  
 
==Beispiel==
 
==Beispiel==
Zeile 34: Zeile 34:
 
|}
 
|}
  
Die verknüpfung von Zahl 1 und Zahl 2 ergibt:
+
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 verknüpfung von Zahl 1, Zahl 2 and Zahl 3 ergibt:
+
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.

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.