Bitweise Operatoren: AND OR XOR und BitShift

Bitweise Operatoren (Bit-Operatoren) sind dazu da, um einzelne Bits miteinander zu vergleichen oder Werte anhand von einzelnen Bits zu manipulieren. Was ein Bit ist, haben wir bereits geklärt: die kleinste Einheit in einem Computersystem, die einzelnen Stellen in einer binären Zahl.
Am besten lassen sich bitweise Operatoren an einem Beispiel erklären:

AND

Halbaddierer aus AND und OR Gattern

Ein Halbaddierer, logisches Element zur Addition zweier binärer Zahlen.
Quelle: MovGP0

Der Operator AND prüft, ob beide Operanden Wahr sind. Eine binäre Zahl besteht natürlich nur aus 0 und 1, nicht aus Wahr und Falsch, daher setzt man 0 stellvertretend für Falsch, 1 entspricht Wahr.
Achtung: 1 ist nicht gleicht Wahr! Bei bitweisen Operationen entspricht es nur diesem Wert, ist aber nicht identisch damit.
AND lässt sich nun so beschreiben: Sind beide Operanden Wahr (1), ist das Ergebnis der AND-Aussage Wahr(1). Ist (mindestens) ein Operand nicht Wahr(Falsch, 0), ist das Ergebnis Falsch(0).
Übersichtlich in einer Tabelle:

Operand A Operand B Ergebnis von A ∧ B
Wahr Wahr Wahr
Wahr Falsch Falsch
Falsch Wahr Falsch
Falsch Falsch Falsch

Übrigens: In Computersystemen werden wahr/falsch als boolesche Werte gespeichert und genutzt, der boolesche Wert für Wahr entspricht true, für Falsch ist es false.
Wir können nun 0 stellvertretend für false, 1 für true einsetzen, und 2 Bits überprüfen:
1 AND 1 = 1, 1 AND 0 = 0, 0 AND 1 = 0, 0 AND 0 = 0.


In der Regel werden Daten als Paket von 8 Bits, also als ein Byte gespeichert. Wir können nun 2 Zahlen mit AND miteinander verknüpfen, indem wir die Stellen mit gleichem Stellenwert miteinander verknüpfen:

203 1 1 0 0 1 0 1 1
172 1 0 1 0 1 1 0 0
203 AND 172 1 0 0 0 1 0 0 0

Die Stellen wurden einfach vertikal miteinander mit AND verknüpft. Neben AND gibt es noch weitere Anweisungen wie OR, XOR, sowie die Negationen NOT, NAND, NOR, XNOR (NOT negiert einen Wert, NOT true = false, NOT false = true. NAND, NOR und XNOR sind die negierten Werte von AND, OR und XOR).

OR

Or prüft, ob (mindestens) einer der beiden Operanden true ist:

Operand A Operand B Ergebnis von A ∨ B
1 1 1
1 0 1
0 1 1
0 0 0

OR ist also nur false, wenn beide Operanden false sind.
Beispiel:

203 1 1 0 0 1 0 1 1
172 1 0 1 0 1 1 0 0
203 OR 172 1 1 1 0 1 1 1 1

XOR

Das Exclusive OR, XOR, bietet folgende Funktion: Nur wenn sich die beiden Operanden unterscheiden, ist der Ausdruck true:

Operand A Operand B Ergebnis von A XOR B
1 1 0
1 0 1
0 1 1
0 0 0

XOR prüft also, ob genau ein Operand true ist.

203 1 1 0 0 1 0 1 1
172 1 0 1 0 1 1 0 0
203 XOR 172 0 1 1 0 0 1 1 1

Mit diesen bitweisen Operatoren kann man z.B. einen Halbaddierer leicht programmieren.

Bitshift

Hinzu kommen noch die Operatoren Shift Left und Shift Right. Sie führen eine simple Aktion durch: die Stellen werden nach links oder rechts verschoben. Die „fehlenden“ Ziffern werden mit 0 aufgefüllt:

Operand A SHR A, 1 SHL A, 1
11001100 01100110 10011000

Die Bit-Operatoren haben unterschiedliche Einsatzzwecke, sie werden vor allem für effiziente logische Operationen benötigt, für Emulation und für mathematische Operationen.
Der nächste Artikel wird sich mit logischen Operatoren befassen. Diese logischen Operatoren bauen auf den Bit-Operatoren auf, man kann z.B. 2 Werte auf Gleichheit prüfen, indem man die Bits der Werte durch AND verknüpft.
Anschließend wird noch die Syntax der DCPU-16 Assembly besprochen.
Falls ihr Fragen/Ideen/Kritik habt, schreibt in die Kommentare.

MfG
Damon

Dieser Eintrag wurde veröffentlicht in 0x10c und getagged .
Bookmarken: Permanent-Link Schreibe einen Kommentar oder hinterlasse einen Trackback: Trackback-URL.
Achtung: Wordpress interpretiert bestimmte Zeichenfolgen als Markup und verändert diese. Nutzt für Programmcode lieber Gist oder PasteBin-Services und verlinkt die Code-Schnipsel.

Post a Comment

Sie müssen angemeldet sein, um kommentieren zu können.