84 votes

Que fait l'opérateur ^ (XOR) ?

Quelle est l'opération mathématique réalisée par XOR ?

155voto

phant0m Points 8545

XOR est une opération binaire, qui signifie "exclusif ou", c'est-à-dire que le bit résultant est évalué à un si seulement exactement un des bits est activé.

Voici son tableau de fonctions :

a | b | a ^ b
--|---|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0

Cette opération est effectuée entre tous les deux bits correspondants d'un nombre.

Ejemplo: 7 ^ 10
En binaire : 0111 ^ 1010

  0111
^ 1010
======
  1101 = 13

Propriétés : L'opération est commutative, associative et auto-inverse.

C'est aussi la même chose que l'addition modulo 2.

56voto

Martijn Pieters Points 271458

^ est el Opérateur XOR bitwise de Python . C'est la façon dont on écrit XOR en python :

>>> 0 ^ 0
0
>>> 0 ^ 1
1
>>> 1 ^ 0
1
>>> 1 ^ 1
0

XOR signifie OU exclusif . Il est utilisé en cryptographie car il permet de "retourner" les bits à l'aide d'un masque dans une opération inversable :

>>> 10 ^ 5
15
>>> 15 ^ 5
10

5 est le masque ; (masque XOR d'entrée) Masque XOR vous donne à nouveau l'entrée.

12voto

nagendra547 Points 1847

Un peu plus d'informations sur l'opération XOR.

  • XOR un nombre avec lui-même un nombre impair de fois le résultat est un nombre lui-même.
  • XOR un nombre pair de fois avec lui-même, le résultat est 0.
  • De même, le XOR avec 0 est toujours le nombre lui-même.

5voto

Abhishek Bhagate Points 5058

Une chose que les autres réponses ne mentionnent pas ici est la suivante XOR avec des nombres négatifs -

 a  |  b  | a ^ b
----|-----|------
 0  |  0  |  0
 0  |  1  |  1
 1  |  0  |  1
 1  |  1  |  0

Bien que vous puissiez facilement comprendre le fonctionnement du XOR à l'aide du tableau fonctionnel ci-dessus, celui-ci n'indique pas comment il fonctionnera avec des nombres négatifs.


Comment fonctionne le XOR avec les nombres négatifs :

Comme cette question est également étiquetée python, je vais y répondre dans cette optique. Les XOR ( ^ ) est un opérateur logique qui renverra 1 lorsque les bits sont différents et 0 ailleurs.

Un nombre négatif est stocké en binaire sous la forme complément à deux . En complément à 2, la position du bit le plus à gauche est réservée au signe de la valeur (positif ou négatif) et ne contribue pas à la valeur du nombre.

En, Python les nombres négatifs s'écrivent avec un en tête au lieu d'un en tête zéro. Ainsi, si vous n'utilisez que 8 bits pour votre complément à deux vous traitez les motifs de 00000000 a 01111111 a comme les nombres entiers de 0 à 127, et réserve 1xxxxxxx f négatifs.

En gardant cela à l'esprit, nous allons comprendre comment fonctionne le XOR sur un nombre négatif à l'aide d'un exemple. Considérons l'expression - ( -5 ^ -3 ) .

  • La représentation binaire de -5 peut être considéré comme 1000...101 y
  • Représentation binaire de -3 peut être considéré comme 1000...011 .

Ici, ... désigne tous les 0, dont le nombre dépend des bits utilisés pour la représentation (32 bits, 64 bits, etc.). Les 1 à la MSB ( Most Significant Bit ) indique que le nombre représenté en binaire est négatif. L'opération XOR sera effectuée sur tous les bits comme d'habitude.

Opération XOR :

      -5   :  10000101          |
     ^                          | 
      -3   :  10000011          |  
    ===================         |
    Result :  00000110  =  6    |
________________________________|

      -5 ^ -3 = 6

Comme le MSB devient 0 après l'opération XOR, le nombre résultant obtenu est un nombre positif. De même, pour tous les nombres négatifs, nous considérons leur représentation en format binaire en utilisant Complément à 2 (l'un des plus couramment utilisés) et effectuer un simple XOR sur leur représentation binaire.

En Le bit MSB du résultat indiquera le signe et le le reste des bits indique la valeur du résultat final.

Le tableau suivant peut être utile pour déterminer le signe du résultat.

  a   |   b   | a ^ b
------|-------|------
  +   |   +   |   +
  +   |   -   |   -
  -   |   +   |   -
  -   |   -   |   +

Les règles de base du XOR restent les mêmes pour les opérations XOR négatives, mais la façon dont l'opération fonctionne réellement dans les nombres négatifs pourrait être utile à quelqu'un un jour.

4voto

bhristov Points 2947

Une autre application pour XOR est en circuit. Il est utilisé pour additionner des bits.

Lorsque vous regardez une table de vérité :

 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

Vous pouvez remarquer que le résultat de XOR est x ajouté à y, sans tenir compte du bit de retenue, le bit de retenue est obtenu à partir de l'élément AND entre x et y.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X