Logik gibt es in verschiedenen Erscheinungsformen - als Alltagslogik, als Aussagenlogik, als klassische Logik, als Fuzzy-Logik, als formale Logik und so weiter.
Es geht dabei i.P. immer darum, aus einem bestimmten Satz vorgegebener Möglichkeiten Verknüpfungen zu bilden, dabei aber rein durch Betrachtung der Anordnung eine Aussage über die Zulässigkeit, d.h. Gültigkeit, der Verknüpfung zu treffen. Man versucht also eine formale Beschreibung zu finden, die es ermöglicht zu sagen, ob irgendetwas unter bestimmten Voraussetzungen bzw. Annahmen gültig sein kann, und das ohne den Inhalt dabei zu betrachten.
Für die "Binär-Logik" interessieren dabei eigentlich nur ein paar wenige Verknüpfungen und Operationen, die sich meist mit dem Zusammentreffen zweier Einzel-Bits beschäftigen, wobei das Ergebnis voraussagbar ist anhand der Verknüpfungsart.
UND und ODER
Es werden hierbei 2 Einzelwerte mittels einem UND bzw. einem ODER verknüpft.
Das funktioniert eigentlich so, wie es umgangssprachlich auch verwendet wird. Bei einem UND sind beide Werte gültig und das Ergebnis enthält folglich beide Werte gleichzeitig, aber nur dann, wenn beide auch "da" sind.
Peter ist groß UND hat eine rote Nase !
Das bedeutet, daß alle anderen Peter, also die kleinen Peter, solche mit grüner Nase etc., nicht DER Peter sein können.
Peter ist groß ODER hat eine rote Nase !
Dies erweitert den Personenkreis beträchtlich, weil nur eine von beiden Beschreibungen zutreffen muß, damit es DER Peter sein könnte. Es sind ja nun alle kleinen Peter mit roter Nase ebenso "gültig" wie die Peter, die groß sind und eine grüne, blaue, orange Nase haben.
Im Fall von Bits sind die Grundelemente natürlich keine Nasen o.ä., sondern eben Bits.
Üblicherweise schreibt man die Möglichkeiten, die sich ergeben, in eine Tabelle und die zulässigen Verknüpfungsergebnisse dazu.
Da man 2 unabhängige Bits miteinander verknüpft, kann also Bit A den Wert "0" annehmen bzw. alternativ den Wert "1". Für Bit B gilt das Gleiche. Man schaut sich dann für alle denkbaren Möglichkeiten die Verknüpfungen an. d.h.
Bit A ist 0 , Bit B ist 0 ->Verknüpfung
Bit A ist 1 , Bit B ist 0 ->Verknüpfung
Bit A ist 0 , Bit B ist 1 ->Verknüpfung
Bit A ist 1 , Bit B ist 1 ->Verknüpfung
und trifft für die jeweilige Art der Verknüpfung eine Aussage über das Ergebnis.
Beim obigen Beispiel muß(!) der Peter in der UND Verknüpfung BEIDE Merkmale haben, damit es der richtige ist. In Bits bedeutet das, daß Bit A und Bit B gesetzt sein müssen, damit man das Ergebnis auch setzen kann.
Also:
Bit A = 0 , Bit B = 0 , UND verknüpft : 0
Bit A = 1 , Bit B = 0 , UND verknüpft : 0
Bit A = 0 , Bit B = 1 , UND verknüpft : 0
Bit A = 1 , Bit B = 1 , UND verknüpft : 1
Für die ODER Verknüpfung reicht es aus EINES VON BEIDEN Merkmalen zu haben. Aber es ist durchaus auch OK, wenn beide zutreffend sind, also "groß"+"rote Nase". In Bits reicht es also aus, wenn nur eines gesetzt ist, beide sind aber ebenfalls zulässig.
Bit A = 0 , Bit B = 0 , ODER verknüpft : 0
Bit A = 1 , Bit B = 0 , ODER verknüpft : 1
Bit A = 0 , Bit B = 1 , ODER verknüpft : 1
Bit A = 1 , Bit B = 1 , ODER verknüpft : 1
Wozu ist das nun gut ?
Man kann es z.B. Verwenden, um Bits wie Schalter gezielt an- oder abzuschalten. Und das auch so, daß die Bits in der Nachbarschaft nicht geändert werden. Es lassen sich auftretende Ereignisse erst dann auslösen, wenn eine oder mehrere Bedingungen zutreffen. Es lassen sich Daten, z.B. Grafiken, modifizieren, indem man nur bestimmte Wertebereiche zuläßt. Es lassen sich etwa Nibbles damit "einzeln" darstellen, so daß man sie getrennt bearbeiten kann u.v.m.
Wie geht es ?
Man betrachtet die Werte in ihrer binären Form. Zahlen sind also Folgen von "0" bzw. "1" in unterschiedlicher Zusammensetzung. Da es ja um eine Verknüpfung geht, braucht man 2 Zahlen. Von diesen wird jede einzelne Stelle mit der gleichen Stelle in der anderen Zahl nach dem Schema oben "verrechnet".
Hat man z.B. eine 8-Bit Zahl in binär %11001001 und eine %11011100 werden Stelle 0 mit Stelle 0, Stelle 1 mit Stelle 1 usf. verknüpft. Am Besten schreibt man sie dazu übereinander
%11001001 - Zahl1
%11011100 - Zahl2
und das Ergebnis nach der Verknüpfungstabelle einfach darunter
%1xxxxxxx - UND Verknüpfung Stelle7
%x1xxxxxx - UND Verknüpfung Stelle6
%xx0xxxxx - UND Verknüpfung Stelle5
%xxx0xxxx - UND Verknüpfung Stelle4
%xxxx1xxx - UND Verknüpfung Stelle3
%xxxxx0xx - UND Verknüpfung Stelle2
%xxxxxx0x - UND Verknüpfung Stelle1
%xxxxxxx0 - UND Verknüpfung Stelle0
%11001001 - alles zusammen dargestellt (UND verknüpft)
Für ODER passiert das ebenso und es ergibt sich
%11011101 - alles zusammen dargestellt (ODER verknüpft)
Will man nun etwa ein Einzelbit setzen, verknüpft man eine Zahl ODER mit dem gesetzten Bit an der gewünschten Stelle. Den "Wunsch" trägt man dazu in Zahl2 ein, z.B. Bit 5 und 7 sollen gesetzt werden:
%11001001 - Zahl1
%10100000 - Bit 5 und 7 gesetzt in Zahl2
%11101001 - Ergebnis der ODER Verknüpfung
Man sieht, daß Bit 7 gesetzt war (in Zahl1) und durch die Zahl2 nicht geändert wird - es ist also im Ergebnis gesetzt. Bit 5 dagegen ist in Zahl1 noch "0" und wird durch das gesetzte Bit 5 in Zahl2 sowie die ODER Verknüpfung nun angeschaltet.
Um ein oder mehrere Einzelbits zu löschen benutzt man die UND Verknüpfung. Bit 0 bis 3 sollen gelöscht werden. Dafür setzt man alle zu löschenden Bits auf 0 und alle, die in ihrem aktuellen Zustand erhalten werden sollen, auf 1.
%11001001 - Zahl1
%11110000 - Bit 0,1,2,3 sind "0" in Zahl2
%11000000 - Ergebnis der UND Verknüpfung
Es findet sich in den Bits 4 bis 7 der Originalzustand wie in Zahl1. Aber die Bits 0 bis 3 sind komplett gelöscht, unabhängig davon, ob sie zuvor eine 0 oder eine 1 enthielten.
Die Bitbreite, also ob 8-Bit, 16-Bit, 32-Bit etc. spielt hierbei keine Rolle. Es muß nur sichergestellt sein, daß der Verknüpfungsbefehl für jede Stelle zwei Bits vorfindet, die er nach der Verknüpfungstabelle zusammenfassen kann.