18. Bitmanipulationen. Bitoperationen Bitmasken

18. Bitmanipulationen Bitoperationen Bitmasken Anwendung von Bits Statusanzeigen bei Ein-/Ausgabe (Stream-Klassen) Zugriffsrechte auf Dateien Masc...
Author: Tomas Kerner
2 downloads 1 Views 33KB Size
18. Bitmanipulationen

Bitoperationen Bitmasken

Anwendung von Bits

Statusanzeigen bei Ein-/Ausgabe (Stream-Klassen) Zugriffsrechte auf Dateien Maschinensteuerung/Gerätetreiber Status-/Steuerungsangaben für Anlagen

Dr. Norbert Spangler / Grundlagen der Informatik

27.05.2007

2

Bitoperatoren & | ^ ~ >

bitweises UND bitweises ODER bitweises exklusives ODER (XOR) Komplement NICHT Links-Shift Rechts-Shift

Die Operanden müssen vom ganzzahligen Typ sein. Die Bitoperatoren sollte man nicht mit den logischen Operatoren && bzw. || verwechseln, welche stets auf die gesamte Zahl wirken und nicht auf die einzelnen Bits.

Dr. Norbert Spangler / Grundlagen der Informatik

27.05.2007

3

Wahrheitstafeln UND 0&0 0&1 1&0 1&1

Ergebnis 0 0 0 1

XOR 0^0 0 ^1 1^0 1^1

Ergebnis 0 1 1 0

Dr. Norbert Spangler / Grundlagen der Informatik

ODER Ergebnis 0|0 0 0|1 1 1|0 1 1|1 1 NICHT Ergebnis ~0 1 ~0 1

27.05.2007

4

Aufgabe: Löschen von Bits Die Bits 3-7 und 10-12 in einem Operanden sollen gelöscht werden. Erzeugung einer Maske, welche an den zu löschenden Bitpositionen 0 hat und ansonsten 1 1110 0011 0000 0011

= E303

In C++: short maske=0xE303, operand=0xC1F1;

Anwendung des UND-Operators

operand 1100 0001 1111 0001=C1F1

ergebnis = operand & maske

maske

1110 0011 0000 0011=E303

ergebnis 1100 0001 0000 0001=C101

Dr. Norbert Spangler / Grundlagen der Informatik

27.05.2007

5

Aufgabe: Löschen von Bits Spezialfall: alle Bits bis auf eines sind 0 (maske hat nur 1 gesetztes Bit).

Anwendung des UND-Operators

operand 1100 0001 1111 0001=C1F1

ergebnis = operand & maske

maske

0000 0001 0000 0000=0101

ergebnis 0000 0001 0000 0000=0100

Ergebnis: Das Bit an der entsprechenden Position im Operanden wird übernommen und alle anderen werden gelöscht. D.h. ist das Ergebnis 0, war dieses Bit 0, ist das Ergebnis ungleich 0, war das Bit 1. Damit können einzelne Bits geprüft werden.

Dr. Norbert Spangler / Grundlagen der Informatik

27.05.2007

6

Aufgabe: Setzen von Bits Die Bits 0-2,8-9,13-15 in einem Operanden sollen gesetzt werden. Erzeugung einer Maske, welche an den zu setzenden Bitpositionen 1 hat und ansonsten 0. 1110 0011 0000 0111

= E303

In C++: short maske=0xE303, operand=0xC1F1;

Anwendung des ODER-Operators

operand 1100 0001 1111 0001=C1F1

ergebnis = operand | maske

maske

1110 0011 0000 0011=E303

ergebnis 1110 0011 1111 0011=E3F3

Dr. Norbert Spangler / Grundlagen der Informatik

27.05.2007

7

Aufgabe: Invertieren von Bits Die Bits 0-2,8-9,13-15 in einem Operanden sollen invertiert werden. Erzeugung einer Maske, welche an den zu invertierenden Bitpositionen 1 hat und ansonsten 0 1110 0011 0000 0111

= E303

In C++: short maske=0xE303, operand=0xC1F1;

Anwendung des XOR-Operators

operand 1100 0001 1111 0001=C1F1

ergebnis = operand ^ maske

maske

1110 0011 0000 0011=E303

ergebnis 0010 0010 1111 0010=22F2

Dr. Norbert Spangler / Grundlagen der Informatik

27.05.2007

8

Aufgabe: Invertieren aller Bits Anwendung des Nicht-Operators (anstelle der Variante mit einer Maske, in der alle Bitpositionen gesetzt sind + Anwendung des XOR-Operators)

In C++: short operand=0xC1F1;

ergebnis = ~operand

operand 1100 0001 1111 0001=C1F1 ergebnis 0011 1110 0000 1110=3E0E

Dr. Norbert Spangler / Grundlagen der Informatik

27.05.2007

9

Zusammenfassung

operand & maske

Alle Bits, die in maske 0 sind, werden gelöscht

operand | maske

Alle Bits, die in maske 1 sind, werden gesetzt

operand ^ maske

Alle Bits, die in maske 1 sind, werden invertiert

~ maske

Alle Bits werden invertiert

Dr. Norbert Spangler / Grundlagen der Informatik

27.05.2007

10

Beispielprogramm #include #include using namespace std; void main() { unsigned short operand=0xC1F1, maske=0xE303,ergebnis; // Bits loeschen ergebnis=maske & operand; cout