Si si, ça fonctionne. L'expression est evaluée de droite à gauche, ça revient à faire :
a^=b;
b^=a;
a^=b;
on va noter a0 et b0 les valeurs initiales de a et b.
Après la première ligne, a vaut a0^b0 et b vaut b
Après la seconde ligne, a vaut a0^b0 et b vaut b0^(a0^b0) == a0
Après la troisième ligne, a vaut (a0^b0)^b0==a0 et b vaut a0
Il me semble même que gcc a un algo exprès pour optimiser cette expression ...
cqfd ...
[^] # Re: Haut les mains ! c'est un Hold Up !
Posté par Bruno (site web personnel) . En réponse au journal Haut les mains ! c'est un Hold Up !. Évalué à 1.
a^=b;
b^=a;
a^=b;
on va noter a0 et b0 les valeurs initiales de a et b.
Après la première ligne, a vaut a0^b0 et b vaut b
Après la seconde ligne, a vaut a0^b0 et b vaut b0^(a0^b0) == a0
Après la troisième ligne, a vaut (a0^b0)^b0==a0 et b vaut a0
Il me semble même que gcc a un algo exprès pour optimiser cette expression ...
cqfd ...