Programmieren
 
 
 
 
 
C-Grundkurs
 
 
 
 
 
.. logische Operationen für Bits und Schiebeoperationen
 
 

 
 
 
 
 
Logische Verknüpfungen auf Bits sind mathematische Operationen, die sich aus der Anwendung der Wahrheitstabellen aus der Digitaltechnik, auf die Setzung von Bits innerhalb einer Speicherzelle ergeben.
 
 
 

 
 
logische Operationen in C .. auf Bits
Zunächst muss beachtet werden, dass es die logischen Verknüpfungen UND, ODER und die Negation in C in zwei voneinander verschiedenen Ausführungsarten gibt. Einmal können Variable mit ihnen verbunden werden, hier sind es dagegen die Bits von Speicherzellen.
Sie werden wie in der Digitaltechnik durch die Operationen UND (&), ODER (|), das exklusive ODER (XOR) (^) und die Negation (~) einzeln miteinander verbunden.
 
 

 

&

logische UND - Verknüpfung auf die Setzungen 0 und 1 von einzelnen Bits

 

 

|

logische ODER - Verknüpfung auf die Setzungen 0 und 1 von einzelnen Bits

 

 

^

logische XOR - Verknüpfung auf die Setzungen 0 und 1 von einzelnen Bits

 

 

~

Negation, NICHT – Invertierung der Setzungen 0 und 1 von einzelnen Bits

 

 

 

Die logischen Verknüpfungen &, |,^,~ auf Bits, dürfen nicht mit den logischen Operatoren &&, ||, ! verwechselt werden. Letztere verbinden die Wahrheitswerte von Variablen logisch miteinander.

 

 
 
 
 
Schiebeoperationen von Bits
Ein zweites Thema, dass sich bei der Betrachtung von Bits innerhalb von Variablen anbietet ist das des Rechts- und Linksschiebens von Bits. Hierbei fallen die herausgeschobenen Bits ersatzlos weg, und die neu hereingeschobenen Bit der anderen Seite besitzen den Wert 0.
Mathematisch kann man das Schieben nach links als Multiplikation mit 2,4,8 .. 2^n auffassen und das Schieben nach rechts als Ganzzahldivision durch 2,4,8 .. usw.
 

 

>>
Schieben nach rechts .. um die angegebene Anzahl von Bits

 

 

<<
Schieben nach links .. um die angegebene Anzahl von Bits

 

 
 
 
 
Anwendungsbereiche
Beide Operationstypen, die logischen und die Schiebeoperationen werden in ihrer Kombination sowohl bei der Codewandlung, als auch bei der Abfrage von digitalen Toren eingesetzt. Während durch Schiebeoperationen die Bits an eine gewünschte Position im Speicher gebracht werden können, wird mit den logischen Operationen eine Maskierung durchgeführt.
 
 
 
 
 

 
 
Die Maskenbildung
Die logischen Operationen UND, ODER, und exclusives ODER (XOR) entsprechen bei der Bildung von Masken genau dem, was aus den Wahrheitstabellen der Digitaltechnik bekannt ist. Bei der Maskenbildung ändert sich nur die Sichtweise auf diese Operationen.
Hier geht es darum, wie sich eine fest vorgegebene Bitkombination, die Maske, auf eine variable Bitkombination auswirkt.
Variable Bitkombinationen können dabei beispielsweise die Bits von beliebigen ASCII-Zeichen sein, oder solche die von einem Tor gelesen werden. An ihnen soll die Maske eine Wirkung hervorrufen.

Beispiel
Die großen Buchstaben des ASCII-Zeichencodes unterscheiden sich von den kleinen Buchstaben nur durch ein Bit, welches immer an der gleichen Stelle auftritt.

z.B.                        'A' = 0x41 = 0100 0001
                            'a' = 0x61 = 0110 0001

Könnte man durch eine Maske die rote 1 des kleinen 'a' zu einer 0 wandeln so würde aus diesem ein großes 'A' werden. Umgekehrt könnte ein großes 'A' zu einem kleinen 'a' werden wenn die 0 zu einer 1 würde. Da wie gesagt dieses Bit alle großen Buchstaben von den kleinen unterscheidet, wäre es also möglich, in einen Text per Programmierung alle Buchstaben zu großen Buchstaben oder umgekehrt zu wandeln. Die Lösung ist eine Maskierung. Würde man das variable Byte 'a' = 0x41 mit der UND-Maske 0xDF verknüpfen, so bekäme man das große 'A'.
 
 
 
 
 
 
variables Byte
'a'  = 0x61
 
 
0
1
1
0
0
0
0
1
 
 
 
 
 
 
UND-Maske
= 0xDF
 
&
1
1
0
1
1
1
1
1
 
 
 
 
 
 
Ergebnis
'A'  = 0x41
 
=
0
1
0
0
0
0
0
1
 
 
 
 
 
 
 
 
Vergleicht man das variable Byte mit dem Resultat, kann festgestellt werden das beide bis auf die rote Stelle identisch sind. Die 1-Bits der Maske bewirken also keine Veränderung des variablen Bytes. Dagegen bringt das 0-Bit der Maske eine 0 im Resultat hervor, was das gestellte Problem löst .. und angewendet auf den ASCII-Zeichensatz alle kleinen Buchstabe in große wandeln würde.
 
 
 
 
 
Es gibt genau drei logische Verknüpfungen die jeder Prozessor beherrscht und die in jeder Hochsprache vorkommen. Sie werden folgend zusammenfassend aufgeführt und ihre Wirkung aus der Sicht einer Maskenbildung zusammengefasst. Die Kernfragestellung lautet dabei..
'Was bewirkt das Maskenbyte'? ..
 
 
 
 
 
 
 
 
UND-Masken
 
 

 
 
 
variables Byte
= 0x33
 
 
0
0
1
1
 
0
0
1
1
 
 
 
 
 
UND-Maske
= 0x0F
 
&
0
0
0
0
 
1
1
1
1
 
 
 
 
 
Ergebnis
= 0x03
 
=
0
0
0
0
 
0
0
1
1
 
 
 
 
 
 
 
 
 
0 erzwungen
 
erhalten
 
 
 
 
Zusammenfassung UND-Masken ..
0 in der Maske bewirkt, dass das betroffene Bit im variablen Byte auf 0 gezwungen wird.
1 in der Maske bewirkt, dass das betroffene Bit im variablen Byte erhalten bleiben
 
 
 
 
 
 
 
 
ODER-Masken
 
 

 
 
 
variables Byte
= 0x33
 
 
0
0
1
1
 
0
0
1
1
 
 
 
 
 
ODER-Maske
= 0x0F
 
|
0
0
0
0
 
1
1
1
1
 
 
 
 
 
Ergebnis
= 0x3F
 
=
0
0
1
1
 
1
1
1
1
 
 
 
 
 
 
 
 
 
erhalten
 
1 erzwungen
 
 
 
 
Zusammenfassung ODER-Masken ..
0 in der Maske bewirkt, dass das betroffene Bit im variablen Byte erhalten bleibt.
1 in der Maske bewirkt, dass das betroffene Bit im variablen Byte auf 1 gezwungen wird.
 
 
 
 
 
 
 
 
XOR-Masken
 
 

 
 
 
variables Byte
= 0x33
 
 
0
0
1
1
 
0
0
1
1
 
 
 
 
 
XOR-Maske
= 0x0F
 
^
0
0
0
0
 
1
1
1
1
 
 
 
 
 
Ergebnis
= 0x3C
 
=
0
0
1
1
 
1
1
0
0
 
 
 
 
 
 
 
 
 
erhalten
 
invertiert
 
 
 
 
Zusammenfassung XOR-Masken ..
0 in der Maske bewirkt, dass das betroffene Bit im variablen Byte erhalten bleibt.
1 in der Maske bewirkt, dass das betroffene Bit im variablen Byte invertiert gwird.
 


 
 
 
www..de