====== Bitweise Operatoren ====== Aufbauend auf den logischen Verknüpfungsoperatoren können binäre Zahlen bitweise miteinander verknüpft werden. Diese Seite fasst in Kürze zusammen, wie dies für die Operatoren ''AND'', ''OR'', ''NOT'' und ''XOR'' funktioniert. Eine ausführlichere Erklärung gibt es auf der Wikipedia-Seite [[https://de.wikipedia.org/wiki/Bitweiser_Operator|Bitweiser Operator]]. ===== Funktionsweise ===== Bei den **logischen Verknüpfungen** ''AND'' und ''OR'' werden zwei einzelne Wahrheitswerte verknüpft. Mit Hilfe von **bitweisen Operatoren** lassen sich ganze Bitfolgen miteinander verknüpfen. Basis dafür ist wieder eine Wahrheitstabelle. ==== Bitweise AND-Verknüpfung ==== Bei der Bitweisen ''AND''-Verknüpfung werden zwei binäre Zeichenfolgen gleicher Länge miteinander verknüpft. Bei Bedarf wird die kürzere der beiden mit führenden Nullen aufgefüllt. Hier ein Beispiel zur Erklärung. Die Wahrheitstabelle rechts dient als Gedächtnisstütze Es sollen die beiden Binärzahlen ''1011 1100'' und ''1001 0110'' mittels ''AND'' verknüpft werden. Wahrheitstabelle für AND 1011 1100 1 1 | 1 AND 1001 0110 1 0 | 0 -------------- 0 1 | 0 1001 0100 0 0 | 0 In diesem Beispiel wurden jeweils die zwei gleichwertigen Stellen der beiden zu verknüpfenden Zahlen anhand der nebenstehenden Wahrheitstabelle verknüpft und das Ergebnis bitweise daruntergeschrieben. Schrittweise bedeutet das: * 1. Stelle: ''1 AND 1 = 1'' * 2. Stelle: ''0 AND 0 = 0'' * 3. Stelle: ''1 AND 0 = 0'' * 4. Stelle: ''1 AND 1 = 1'' * 5. Stelle: ''1 AND 0 = 0'' * 6. Stelle: ''1 AND 1 = 1'' * 7. Stelle: ''0 AND 1 = 0'' * 8. Stelle: ''0 AND 0 = 0'' ==== Bitweise OR-Verknüpfung ==== Auch beim bitweisen ''OR'' werden zwei binäre Zeichenfolgen miteinander verknüpft. Bei Bedarf wird ebenso die Länge durch führende Nullen angepasst. Als Beispiel nehmen wir die gleichen Zahlen wie vorhin, verändern aber die Operation zu ''OR'': Wahrheitstabelle für OR 1011 1100 1 1 | 1 OR 1001 0110 1 0 | 1 ------------- 0 1 | 1 1011 1110 0 0 | 0 Wie man sieht, steht jetzt an jeder Ergebnisstelle eine ''1'', bei der //entweder// in der ersten //oder// in der zweiten Zahl eine ''1'' stand. ==== Bitweise NOT-Verknüpfung ==== Beim bitweisen ''NOT'' wird ebenso wie bei dem logischen Operator nur ein Eingabewert benötigt. Wir nehmen deshalb für das Beispiel die erste der beiden oben gezeigten Zahlen: Wahrheitstabelle für NOT NOT 1011 1100 1 | 0 -------------- 0 | 1 0100 0011 Bei der bitweisen ''NOT''-Operation wird einfach nur jedes Bit des Ausgangswertes umgekehrt. ==== Bitweise XOR-Verknüpfung ==== Eine besondere Rolle nimmt die bitweise ''XOR''-Verknüpfung ein. Sie funktioniert ganz ähnlich wie die ''OR''-Verknüpfung. Der Unterschied dabei ist, dass 2 wahre Werte nicht mehr ein wahres Ergebnis liefern. Das Wort **oder** ist also als **exklusives oder** (e**x**clusive **or**) zu verstehen. Nur der eine Teil **oder** der andere dürfen wahr sein aber nicht beide. Wiederholen wir das OR-Beispiel von oben mit XOR: Wahrheitstabelle für XOR 1011 1100 1 1 | 0 OR 1001 0110 1 0 | 1 ------------- 0 1 | 1 0010 1010 0 0 | 0 Wir sehen, dass im Ergebnis dort wo zwei Einsen oder 2 Nullen aufeinandertreffen eine Null steht und nur dort wo zwei unterschiedliche Ziffern zusammenkommen eine Eins herauskommt. ---- === Besondere Bedeutung von XOR === Die XOR-Verknüpfung spielt in der Verschlüsselung eine zentrale Rolle. Dies liegt an der nachfolgend demonstrierten Eigenschaft. Für das Beispiel nehmen wir die Bitfolgen * A: ''1011 0101 1111 0011'' * B: ''1010 0110 0010 1000'' * C: die XOR-Verknüpfung von beiden. 1011 0101 1111 0011 A XOR 1010 0110 0010 1000 B ------------------------ 0001 0011 1101 1011 --> C 1011 0101 1111 0011 A XOR 0001 0011 1101 1011 C ------------------------ 1010 0110 0010 1000 --> B 1010 0110 0010 1000 B XOR 0001 0011 1101 1011 C ------------------------ 1011 0101 1111 0011 --> A Dieses Beispiel zeigt, dass eine bitweise XOR-Verknüpfung * von A mit C wieder B ergibt und * von B mit C wieder A ergibt. Sobald also zwei dieser Zahlen bekannt sind, lässt sich die dritte daraus berechnen. ---- **Exkurs zur Verschlüsselung** Betrachtet man A als eine Nachricht, die geheim gehalten werden soll und B als den Schlüssel, mit dem sie vom Absender zu diesem Zweck verschlüsselt wird, dann ist C die verschlüsselte Nachricht, die gefahrlos verschickt werden kann. Besitzt der Empfänger auch den Schlüssel B und erhält die verschlüsselte Nachricht C, dann kann er daraus den Klartext A berechnen.