Comment l'opérateur au niveau du bit XOR ('^') de travail?
Je suis un peu perplexe quand je vois la sortie de code suivant:
$x = "a";
$y = "b";
$x ^= $y;
$y ^= $x;
$x ^= $y;
echo $x; //Got b
echo $y; //Got a
Comment l'opérateur ^
travailler ici?
- Répondu en stackoverflow.com/questions/249423/...
- Demandez-vous comment l'opérateur ou comment fonctionne le swap fonctionne?
- Sebastian P,je l'ai.Merci.
- dernier.
- Pour info: les chaînes de caractères obtenir tronquée si elles contiennent des différentes nombre de caractères
Vous devez vous connecter pour publier un commentaire.
Cela ressemble à le changement de la valeur à l'aide de XOR. Si je ne suis pas sûr que les chaînes de caractères en PHP (normalement vous l'utilisez pour ints ou quelque chose). Pour une table de vérité du XOR vous pouvez regardez ici.
La chose intéressante à propos de
XOR
est qu'il est réversible: UN XOR B XOR B == A ... qui ne fonctionne pas avecAND
ouOR
. De ce fait, il peut être utilisé comme dans votre exemple pour échanger deux valeurs:signifie:
^ est le "ou exclusif" bit à bit de l'opérateur. Il lit en anglais par "ou". Le résultat est 1 si et seulement si les deux bits sont différents:
Simplifier l'exemple un peu (et à l'aide de Pseudo-code):
Tout ce que PHP a faire est de traiter la chaîne "a" et "b" en tant que leur entier équivalents.
Dans cet exemple, lorsque vous utilisez ^ des personnages, ils sont projetées à des entiers. Donc
est la même chose que:
à une exception près. Dans le premier exemple, le résultat a été coulé en une chaîne de caractères. Par exemple:
en raison de:
et
Th
^
opérateur est un opérateur au niveau du bit, ce qui signifie qu'il fonctionne sur tous les bits de ses opérandes.Elle renvoie une valeur dont chaque bit est
1
si les deux bits correspondants dans les opérandes sont inégales, et0
si ils sont égaux.Par exemple:
L'opérateur ^ effectue un XOR sur les valeurs des bits de chaque variable. XOR est le suivant:
x est le résultat de l'opération XOR. Si les bits sont égaux, le résultat est 0 si elles sont différentes, le résultat est 1.
Dans votre exemple, le ^= effectue un XOR et d'affectation, et vous permutez les bits entre les deux variables $x et $y.
Lire la suite ici http://en.wikipedia.org/wiki/Xor_swap_algorithm
XOR
ou le ou exclusif est basé sur la logique et circuits. Il indique que, par exemple,A ^= B
où A est 0111 et B 0101 peut être 1 ou 0 à chaque bit correspondant, mais pas les deux. DoncPour mieux comprendre ce que les règles de mathématiques binaires s'appliquent, sauf qu'il n'y a pas retenues. Donc en mathématiques binaires 1 + 0 = 1, 0 + 0 = 0, 0 + 1 = 1 et 1 + 1 = 0 (où 1 est reporté à la prochaine plus importante position en mathématiques binaires, mais le XOR des règles de contourner cette).