Was macht der Operator ^ (XOR)?

76

Welche mathematische Operation führt XOR aus?

Hilary Park
quelle
1
XOR ist eine logische Operation, keine mathematische.
Marcin Orlowski

Antworten:

131

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.

phant0m
quelle
2
VIELEN DANK!! Ich wünschte, ich hätte früher gefragt - hätte mich heute Morgen fast verrückt gemacht. Vielen Dank, dass Sie mir einen viel angenehmeren Nachmittag beschert haben !!
Hilary Park
Mann, das ist wirklich so einfach! Ich arbeite daran, Hash-Algorithmen besser zu verstehen, und dies ist eine sehr konstante Operation unter vielen von ihnen.
Mike Perrenoud
2
Es ist auch dasselbe wie Addition Modulo 2. - Was ist damit gemeint?
Raja Dorji
@RajaDorji erklärt hier
mlynn
51

^ ist der bitweise Python-XOR-Operator . So buchstabieren Sie XORin 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 5ist die Maske; (Eingabe-XOR-Maske) Die XOR-Maske gibt Ihnen die Eingabe erneut.

Martijn Pieters
quelle
5
Die Wahrheitstabelle spricht die Wahrheit - und im Gespräch beschreibe ich XOR (eXclusive-OR, manchmal auch als EOR bekannt) normalerweise als "entweder A oder B, aber nicht beide oder keine".
Acht-Bit-Guru
2
Vielen Dank!!! Sie und der andere Befragte haben sicherlich meine geistige Gesundheit für diesen Tag gerettet - ich konnte es einfach NICHT herausfinden und es war so nicht google-fähig.
Hilary Park
5

Ein wenig mehr Informationen zum XOR-Betrieb.

  • XOR eine Zahl mit sich selbst ungerade Anzahl, wie oft das Ergebnis die Zahl selbst ist.
  • XOR eine gerade Zahl mit sich selbst, das Ergebnis ist 0.
  • Auch XOR mit 0 ist immer die Zahl selbst.
nagendra547
quelle
2

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.


So funktioniert XOR mit negativen Zahlen:

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 00000000bis 01111111als ganze Zahlen von 0 bis 127 und reservieren das 1xxxxxxxSchreiben negativer Zahlen.

Lassen Sie uns vor diesem Hintergrund anhand eines Beispiels verstehen, wie XOR bei negativen Zahlen funktioniert. Betrachten wir den Ausdruck - ( -5 ^ -3 ).

  • Die binäre Darstellung von -5kann als 1000...101und betrachtet werden
  • Binäre Darstellung von -3kann 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 1am 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.

XOR-Betrieb:

      -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.

Das MSB-Bit des Ergebnisses bezeichnet das Vorzeichen und der Rest der Bits bezeichnet den Wert des Endergebnisses.

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 🙂.

Abhishek
quelle
1

Eine andere Anwendung für XORist 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 XORx mit y addiert wird, ohne das Übertragsbit zu verfolgen. Das Übertragsbit wird ANDzwischen x und y erhalten.

x^y // is actually ~xy + ~yx
    // Which is the (negated x ANDed with y) OR ( negated y ANDed with x ).
bhristov
quelle
1

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).

Parveen Kumar
quelle