Binäre Operatoren

aus RHWiki, der freien Romhacking-Enzyklopädie

Inhaltsverzeichnis

Was sind Binäre Operatoren ?

Binäre Operatoren beschreiben Rechenoperationen ähnlich z.B. der Addition oder Subtraktion. Im Gegensatz dazu arbeiten binäre Operatoren aber auf Bit-Ebene und führen für jedes Bit einer Zahl eine entsprechende (logische/boolsche) Operation durch. Das Ergebnis einer solchen Rechnung besteht aus den Ergebnissen der Einzeloperationen für jedes Bit.

Beschreibung der einzelnen Operationen

Aus den Operatoren And, Or und Not lassen sich alle anderen Operationen herleiten. Daher sind sie am wichtigsten.

And

"Zahl1 And Zahl2" bzw. "Zahl1 & Zahl2" (UND)
Ein Bit wird im Ergebnis nur dann gesetzt, wenn es in beiden Zahlen gesetzt (also 1) ist.

And-Tabelle

Bit1 Bit2 | Ergebnis
----------+---------
  0    0  |    0
  0    1  |    0
  1    0  |    0
  1    1  |    1
Beispiel:

Zahl 1:      01101110
Zahl 2:  And 10100010
-------------------------
           = 00100010

Aufgrund dieser Eigenschaften wird And auch in sog. Bitmasken verwendet, um bestimmte Bits einer Zahl auf 0 zu setzen und andere Bits zu behalten:

Beispiel:
Die Zahl 10101101 soll auf 4 Bits abgeschnitten werden.

    10101101
And 00001111 (Bitmaske)
-------------------------
  = 00001101 (Ergebnis)

So lässt sich auch abfragen, ob ein bestimmtes Bit einer Zahl gesetzt ist:

Beispiel:
Es soll getestet werden, ob in 01110001 das 4-te Bit gesetzt ist.

    01110001
And 00010000 (Bitmaske)
-------------------------
  = 00010000 (Ergebnis)

Da das Ergebnis ungleich 0 ist, weiß man dass das 4-te Bit gesetzt ist.

Or

"Zahl1 Or Zahl2" bzw. "Zahl1 | Zahl2" (ODER)
Wenn ein Bit in mindestens einer der beiden Zahlen 1 ist, ist es auch im Ergebnis 1.
Ein Bit ist im Ergebnis nur dann 0, wenn es in beiden Operanden 0 ist.

Or-Tabelle

Bit1 Bit2 | Ergebnis
----------+---------
  0    0  |    0
  0    1  |    1
  1    0  |    1
  1    1  |    1
Beispiel:

Zahl 1:      11001011
Zahl 2:   Or 11101000
-------------------------
           = 11101011

Or wird auch benutzt um in einer Zahl gezielt bestimmte Bits auf 1 zu setzen:

Beispiel:
In der Zahl 01100001 soll das Bit #4 auf 1 gesetzt werden.

    01100001
 Or 00010000
-------------------------
  = 01110001 (Ergebnis)

Xor

"Zahl1 Xor Zahl2" bzw. "Zahl1 ^ Zahl2" (Exklusives ODER)
Ein Bit muss in genau einem der beiden Operanden (aber nicht in beiden) gesetzt sein, damit es auch im Ergebnis 1 ist.

Xor-Tabelle

Bit1 Bit2 | Ergebnis
----------+---------
  0    0  |    0
  0    1  |    1
  1    0  |    1
  1    1  |    0
Beispiel:

Zahl 1:      01011111
Zahl 2:  Xor 10010110
-------------------------
           = 11001001

Xor kann benutzt werden, um Bits in einer Zahl umzuschalten, ohne dass ihr genauer Wert bekannt sein muss:

Beispiel:
In der Zahl 10101110 sollen die Bits #1, #4, #5 und #7 umgeschaltet werden.

    10101110
Xor 10110010
-------------------------
  = 00011100 (Ergebnis)

Not

"Not Zahl" bzw. "~ Zahl" (NICHT)
Dieser Operator invertiert eine Zahl, kehrt also alle Bits in ihr um. Die Operation kommt daher einem Xor mit einer Zahl, in der alle Bits 1 sind, gleich.

Not-Tabelle

Bit | Ergebnis
----+---------
 0  |    1
 1  |    0
Beispiel:

Zahl:    Not 10010001
-------------------------
           = 01101110

Zusammenhänge zwischen den Operatoren

Bereits oben wurde festgestellt, dass man bestimmte Operationen durch andere ausdrücken kann.
Hier ein paar Beispiele:

A Xor B = (A Or B) And Not (A And B)

(Not A) And (Not B) = Not (A Or B)

(Not A) Or (Not B) = Not (A And B)

Siehe auch

'Persönliche Werkzeuge