Welche mathematische Operation führt XOR aus?
Welche mathematische Operation führt XOR aus?
Antworten:
XOR ist eine binäre Operation, es steht für "exklusiv oder", dh das resultierende Bit wird zu eins ausgewertet, wenn nur genau eines der Bits gesetzt ist.
Dies ist seine Funktionstabelle:
a | b | a ^ b
--|---|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
Diese Operation wird zwischen jeweils zwei entsprechenden Bits einer Zahl ausgeführt.
Beispiel: 7 ^ 10
Binär:0111 ^ 1010
0111
^ 1010
======
1101 = 13
Eigenschaften: Die Operation ist kommutativ, assoziativ und selbstinvers.
Es ist auch dasselbe wie Addition Modulo 2.
^
ist der bitweise Python-XOR-Operator . So buchstabieren Sie XOR
in Python:
>>> 0 ^ 0
0
>>> 0 ^ 1
1
>>> 1 ^ 0
1
>>> 1 ^ 1
0
XOR steht für exklusives ODER . Es wird in der Kryptographie verwendet, weil Sie damit die Bits mithilfe einer Maske in einer umkehrbaren Operation "umdrehen" können:
>>> 10 ^ 5
15
>>> 15 ^ 5
10
wo 5
ist die Maske; (Eingabe-XOR-Maske) Die XOR-Maske gibt Ihnen die Eingabe erneut.
Ein wenig mehr Informationen zum XOR-Betrieb.
Eine Sache, die andere Antworten hier nicht erwähnen, ist XOR mit negativen Zahlen -
a | b | a ^ b
----|-----|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
Während Sie anhand der obigen Funktionstabelle leicht verstehen können, wie XOR funktioniert, können Sie nicht sagen, wie es mit negativen Zahlen funktioniert.
Da diese Frage auch als Python gekennzeichnet ist, werde ich sie in diesem Sinne beantworten. Die XOR ( ^
) ist ein logischer Operator , der 1 angezeigt werden kann, wenn die Bits 0 verschieden und an anderer Stelle sind.
Eine negative Zahl wird binär als Zweierkomplement gespeichert . Im Zweierkomplement ist die Bitposition ganz links für das Vorzeichen des Werts (positiv oder negativ) reserviert und trägt nicht zum Wert der Zahl bei.
In Python werden negative Zahlen mit einer führenden Eins anstelle einer führenden Null geschrieben. Wenn Sie also nur 8 Bits für die Zweierkomplementzahlen verwenden , behandeln Sie Muster von
00000000
bis01111111
als ganze Zahlen von 0 bis 127 und reservieren das1xxxxxxx
Schreiben negativer Zahlen.
Lassen Sie uns vor diesem Hintergrund anhand eines Beispiels verstehen, wie XOR bei negativen Zahlen funktioniert. Betrachten wir den Ausdruck - ( -5 ^ -3 )
.
-5
kann als 1000...101
und betrachtet werden-3
kann als betrachtet werden 1000...011
.Hier ...
bezeichnet alle 0s, deren Anzahl an Bits für die Darstellung (32-Bit, 64-Bit, etc.) verwendet wird, hängt. Das 1
am MSB (Most Significant Bit) zeigt an, dass die durch die Binärdarstellung dargestellte Zahl negativ ist. Die XOR-Operation wird wie gewohnt für alle Bits ausgeführt.
-5 : 10000101 |
^ |
-3 : 10000011 |
=================== |
Result : 00000110 = 6 |
________________________________|
∴ -5 ^ -3 = 6
Da das MSB nach der XOR-Operation 0 wird, ist die resultierende Zahl, die wir erhalten, eine positive Zahl. In ähnlicher Weise betrachten wir für alle negativen Zahlen ihre Darstellung im Binärformat unter Verwendung des Zweierkomplements (eines der am häufigsten verwendeten) und führen eine einfache XOR für ihre Binärdarstellung durch.
Die folgende Tabelle kann hilfreich sein, um das Vorzeichen des Ergebnisses zu bestimmen.
a | b | a ^ b
------|-------|------
+ | + | +
+ | - | -
- | + | -
- | - | +
Die Grundregeln von XOR bleiben auch für negative XOR-Operationen gleich, aber wie die Operation wirklich in negativen Zahlen funktioniert, könnte eines Tages für jemanden nützlich sein 🙂.
Eine andere Anwendung für XOR
ist in Schaltungen. Es wird verwendet, um Bits zu summieren.
Wenn Sie sich eine Wahrheitstabelle ansehen:
x | y | x^y
---|---|-----
0 | 0 | 0 // 0 plus 0 = 0
0 | 1 | 1 // 0 plus 1 = 1
1 | 0 | 1 // 1 plus 0 = 1
1 | 1 | 0 // 1 plus 1 = 0 ; binary math with 1 bit
Sie können feststellen, dass das Ergebnis von XOR
x mit y addiert wird, ohne das Übertragsbit zu verfolgen. Das Übertragsbit wird AND
zwischen x und y erhalten.
x^y // is actually ~xy + ~yx
// Which is the (negated x ANDed with y) OR ( negated y ANDed with x ).
Der (^) XOR-Operator generiert 1, wenn er auf zwei verschiedene Bits (0 und 1) angewendet wird. Es erzeugt 0, wenn es auf zwei gleiche Bits angewendet wird (0 und 0 oder 1 und 1).