| Zeile 69: | Zeile 69: | ||
== Anwendung == | == Anwendung == | ||
| − | Besonders bei hardwarenaher Programmierung kann man auf die Bit-Operatoren kaum verzichten. Sie sind nötig, da in Hardware | + | Besonders bei hardwarenaher Programmierung kann man auf die Bit-Operatoren kaum verzichten. Sie sind nötig, da in Hardware einzelnen Bits oft dazu dienen einen Zustand der Hardware wiederzuspiegeln: Sie dienen als Flags. Da Software über die CPU aber immer nur auf Bytes zugreifen kann, und so den Zustand einzelner Bits nicht überprüfen kann verwendet man die Bit-Operatoren, um z. B. irrelevante Bits zu löschen oder bestimmte Bits zu setzen ohne den Zustand der anderen Bits zu beeinflussen. |
=== Bits-Löschen === | === Bits-Löschen === | ||
Um bestimmte Bits in einem oder mehreren Bytes zu löschen wird eine (Bit-)Maske benötigt. Die Maske gibt an welche Bits gelöscht werden sollen. | Um bestimmte Bits in einem oder mehreren Bytes zu löschen wird eine (Bit-)Maske benötigt. Die Maske gibt an welche Bits gelöscht werden sollen. | ||
Angenommen du hast ein Byte, dessen 5. Bit unbedingt ''0'' sein muss, weil es für eine Hardware-Funktion steht, die du ausschalten willst. | Angenommen du hast ein Byte, dessen 5. Bit unbedingt ''0'' sein muss, weil es für eine Hardware-Funktion steht, die du ausschalten willst. | ||
| − | Du | + | Du erstellst dir also eine Maske in der nur das 5. Bit gesetzt ist: 00100000b. |
Um das Bit jetzt löschen zu können invertierst du die Maske zunächst mit NOT | Um das Bit jetzt löschen zu können invertierst du die Maske zunächst mit NOT | ||
NOT(00100000b) = 11011111b | NOT(00100000b) = 11011111b | ||
| − | und Verknüpfst dein Byte per AND mit dem | + | und Verknüpfst dein Byte per AND mit dem Resultat |
(????????b AND 11011111b) = ??0?????b | (????????b AND 11011111b) = ??0?????b | ||
| − | Das ganze funktioniert natürlich auch mit mehreren Bits gleichzeitig. | + | Das ganze funktioniert natürlich auch mit mehreren Bits gleichzeitig. Interessiert die z. B. nur ob diese Funktion gerade an- oder ausgeschaltet ist löschst du einfach alle anderen Bits. |
(????????b AND 00100000b) = 00?00000b | (????????b AND 00100000b) = 00?00000b | ||
Ist das Ergebnis gleich 0 dann ist es das Bit auch, ist es ungleich 0 dann ist dein Bit gesetzt. | Ist das Ergebnis gleich 0 dann ist es das Bit auch, ist es ungleich 0 dann ist dein Bit gesetzt. | ||
| Zeile 88: | Zeile 88: | ||
Wie beim Löschen eines Bits wird auch hier eine (Bit-)Maske benötigt. Allerdings gibt sie diesmal an Welches Bit gesetzt werden soll. | Wie beim Löschen eines Bits wird auch hier eine (Bit-)Maske benötigt. Allerdings gibt sie diesmal an Welches Bit gesetzt werden soll. | ||
Um z. B. die Bits 1,4,5 auf ''1'' zu setzen erstellt man sich als Maske: 00110010b | Um z. B. die Bits 1,4,5 auf ''1'' zu setzen erstellt man sich als Maske: 00110010b | ||
| − | Im | + | Im Gegensatz zum Löschen wird jetzt allerdings mit einem einfachen OR verknüpft. |
(????????b OR 00110010b) = ??11??1?b | (????????b OR 00110010b) = ??11??1?b | ||