Quelle est l'opération mathématique réalisée par XOR ?
Réponses
Trop de publicités?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.
^
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
où 5
est le masque ; (masque XOR d'entrée) Masque XOR vous donne à nouveau l'entrée.
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
a01111111
a comme les nombres entiers de 0 à 127, et réserve1xxxxxxx
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é comme1000...101
y - Représentation binaire de
-3
peut être considéré comme1000...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.
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 ).
- Réponses précédentes
- Plus de réponses