Erstellt: 29. Dezember 2012 (zuletzt geändert: 1. Januar 2018)

Boolsche Algebra

…oder warum %10 UND %10 gleich %10 ist.

Schauen wir uns mal die Boolsche Algebra an und wie man damit Binärzahlen manipulieren kann.

Wozu brauchen wir die Boolsche Algebra überhaupt?

Häufig müssen wir, innerhalb eines Bytes ein einzelnes Bit prüfen oder setzen. So werden z. B. beim C64 in einem Register (ein Byte im Arbeitsspeicher) die acht möglichen Sprites an- und abgeschaltet. Möchten wir jetzt das dritte Sprite (intern hat das dazugehörige Bit die Nr. 2, da man bei den Bits innerhalb eines Bytes, die Zählung immer mit 0 beginnt! – den Hinweis lest hier hier noch oft … sehr oft sogar 😉 ) anzeigen, könnten wir natürlich direkt eine 4 %00000100 in das Register schreiben. Das Problem ist nur, dass dann alle anderen Sprites abgeschaltet werden, was ja nicht immer gewünscht ist.

Hier kommt nun die Boolsche Algebra ins Spiel, beginnen wir mit dem ersten boolschen Operator:

1. AND (UND / Konjunktion)
    %1011
AND %1010
    -----
    %1010

Wie man sieht, wird ein Bit nur dann 1, wenn beide Bits diesen Wert haben, also wenn Bit-A UND Bit-B 1 sind.

Praxisbeispiel:
Möchten wir jetzt z. B. nur das dritte Sprite abschalten, so können wir den Registerinhalt einfach mit einem AND so verändern, dass nur das Bit-2 (denkt dran, dass die Zählung bei 0 beginnt!) auf Null gesetzt wird und alle anderen unverändert bleiben.

Bit-Nr.          76543210
                 --------
Register-Inhalt %11100111
            AND %11111011
                ---------
                %11100011

Wie wir oben gelernt haben, wird das Ergebnis bei einem AND nur 1, wenn beide Bits auf 1 stehen. Indem wir nun alle Bits, bis auf das zu löschende (hier Bit-2 beachtet, dass die Zählung bei 0 beginnt!) auf 1 setzen wird nur Bit-2 gelöscht, der Rest bleibt unverändert.

2. OR (ODER / Disjunktion)
   %1011
OR %1010
   -----
   %1011

Beim OR wird ein Bit immer dann 1, wenn ein oder beide Bits auf 1 stehen, also wenn Bit-A und/ODER Bit-B 1 sind.

Praxisbeispiel:
Möchten wir, wie Eingangs ausgeführt, das dritte Sprite anschalten, so sollten wir dies mit einem OR machen. Wir möchten also das 2. Bit (Beginn der Zählung beachten) auf 1 setzen.

Bit-Nr.          76543210
                 --------
Register-Inhalt %11100011
             OR %00000100
                ---------
                %11100111

Da beim OR das Ergebnis 1 wird, wenn das eine und/oder das andere Bit 1 ist, reicht es, nur die zusetzenden Bits auf 1 zu setzen und dies per OR mit dem Register zu verknüpfen.

3. EOR häufig auch XOR (exclusive or / ausschließendes ODER)
    %1011
EOR %1010
    -----
    %0001

Beim EOR (ich verwende diese Bezeichnung, da beim C64 der entsprechende Befehl so lautet) wird ein Bit nur dann 1, wenn genau eines der beiden Bits auf 1 steht, also wenn NUR Bit-A ODER NUR Bit-B 1 ist.

Praxisbeispiel:
Das EOR findet im Vergleich zu den anderen drei Operanten (zum NOT kommen wir gleich) seltener Anwendung. Nehmen wir mal an, wir möchten das erste und dritte Sprite durch an- / abschalten blinken lassen.

Bit-Nr.          76543210
                 --------
Register-Inhalt %11100111
            EOR %00000101
                ---------
                %11100010
  nächster Lauf
            EOR %00000101
                ---------
                %11100111

Wie wir sehen, werden Bit-0 und Bit-2 (denkt wieder an die Zählung ab o) bei einem Durchlauf auf 0 und beim nächsten wieder auf 1 gesetzt. Beim EOR wird das Ergebnis nur dann 1, wenn genau eines der beiden Bits den Wert 1 hat. Man könnte dies auch durch eine Kombination aus AND & OR erreichen, aber das würde das Programm nur unnötig aufblähen und verlangsamen.

4. NOT (NICHT / Negation)
NOT %1011
---------
    %0100

Bei einem NOT wird jedes Bit umgekehrt, also aus 0 wird 1 und aus 1 wird 0. NOT wird häufig verwendet, um Masken für weitere Operationen zu bilden.

Praxisbeispiel:
Wir möchten die oberen vier Sprites und die unteren abwechselnd blinken lassen.

Bit-Nr.          76543210
                 --------
Register-Inhalt %11110000            
            NOT
                ---------
                %00001111
  nächster Lauf
            NOT
                ---------
                %11110000

Beim NOT wird kein zweiter Wert benötigt. Es ist ein sog. Unärer-Operator, im Gegensatz zu AND, OR und EOR, die Binäre-Operatoren sind, da dort immer zwei Werte benötigt werden.


Schrott!!Naja...Geht so...Ganz gut...SUPER! (15 Bewertungen | Ø 4,87 von 5 | 97,33%)

Loading...


ZurückWeiter

Ein Gedanke zu „Boolsche Algebra“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Protected by WP Anti Spam