Il est donc possible de permuter les valeurs de deux variables sans passer par une variable intermédiaire.

Il suffit pour cela d'utiliser le code suivant :

<?php
// soit $x et $y deux variables
// pour permuter leurs valeurs, il suffit de faire :
$x = $x ^ $y;
$y = $y ^ $x;
$x = $x ^ $y;
?>

Pour ceux qui se poserait la question, l'opérateur ^ correspond au ou exclusif de la logique booléenne.

Évidemment, pour que la magie opère, il y a une contrainte.

Il faut en effet impérativement que les deux variables soient stockées sur le même nombre de bits.

En clair, cela fonctionne, dans le cas de PHP, uniquement pour les entiers et les chaînes de caractères de même longueur.

Je sais d'avance que certains vont s'interroger sur les performances de cette astuce et je vais donc répondre immédiatement à cette interrogation.

Les performances de cette astuce, du moins en PHP, sont tout bonnement lamentable, puisqu'elle est sur ma machine 2.5 fois plus lente que la permutation traditionnelle à  l'aide d'une variable temporaire !

Pourquoi en parler alors ?

Comme je l'ai dis en introduction, pour l'esthétique de la chose, et également pour faire triper Ivan !

Et pour ceux qui se poserait la question, j'ai découvert cette astuce dans Hacker's delight, véritable mine d'or de trucs et astuces de la même veine que celui-ci pour amateur d'algèbre de Boole et de nœuds au cerveau.