Technische Informatik; Hardwarenahe Programmierung

Bitmanipulationen Beschreibung

Inhalt

Die Manipulation einzelner Bits ist vorwiegend in der Mikrocontrollertechnik gebräuchlich, da digitale Pins entsprechend geschaltet oder gelesen werden sollen, bestimmte Registerinhalte bzw. nur einzelne Positionen in den Registern geändert, gesetzt, gelöscht oder gelesen, o.ä. werden sollen. Hierfür dienen die Bitweisen Operatoren die auf ein oder zwei Bitfolgen oder Binärzahlen auf der Ebene einzelner Bits angewendet werden. Außerdem sind bitweise Operationen etwas schneller als Additions- und Subtraktionsoperationen und deutlich schneller als Multiplikations- und Divisionsoperationen. Folgende Operatoren werden eingesetzt:

~bitwise INVERT
&bitwise AND
|bitwise OR
^bitwise XOR

Verwechslung!

Die Bit-Operatoren dürfen nicht mit den Logischer Operatoren verwechselt werden, deren Ergebnis immer eine logische 0 (false) oder 1 (true) ist.

Maskieren

In diesem Zusammenhang kommt oft der Begriff der Maske bzw. Maskieren vor. Einer Maske definiert, welche Bits behalten bzw. welche Bits gelöscht werden sollen.

Z.B. die Extraktion einer Teilmenge der Bits in den Wert (das kleine b steht für binär):

Maske:00001111b
Wert:01010101b

Wird eine AND-Verknüpfung angewendet so bleibt vom Wert nur mehr das untere Nibble übrig und das obere Nibble, also die oberen vier Bits werden gelöscht (0):

Ergebnis:00000101b

Verschieben

Bei der bitweisen Verschiebung werden die Bits eines Wertes nach links oder rechts verschoben. Die Bits am Rand fallen raus, die Stellen auf der anderen Seite werden mit Nullen aufgefüllt.

Linksverschiebung<<
Rechtsverschiebung>>

Z.B. der dezimale Wert 5 = 0101b:

0101b << 1=> 1010b=> 10
0101b >> 1=> 0010b=> 2

Fragen

Stellen Sie die logischen den bitweisen Operatoren in C/C++ gegenüber. Z.B.:

&&&
....
  1. Lösche (0) das LSB (least significant bit), MSB (most significant bit) beim Datentype uint8_t.
  2. Setze (1) das LSB (least significant bit), MSB (most significant bit) beim Datentype uint16_t.
  3. Toggle (0 wird 1 bzw. 1 wird 0) das LSB (least significant bit), MSB (most significant bit) beim Datentype uint32_t.
  4. Lösche/Setze/Toggle das 3. und das 5. Bit beim Datentype uint8_t.
  5. Was entspricht bei der Bitverschiebung einer Multiplikation mit 8. (Beispiel)
  6. Was entspricht bei der Bitverschiebung einer Division durch 32. (Beispiel)

Bitmanipulationen-Grundlegend


All wikipages