Gunnar Bittersmann: Variablenwerte mit Xor vertauschen

Beitrag lesen

Hello out there!

int x = 12,
    y = 49;
x ^= y;  // x = x ^ y
y ^= x;  // y = y ^ x
x ^= y;  // x = x ^ y
System.out.println( x + " " + y );  // Ausgabe ist: 49 12

kann mir das einer für Anfänger erklären??

Schreib das mal so auf, dass du nicht vorhandenen Variablen einen neuen Wert zuweist, sondern neue einführst:

Ausgangswerte: x0, y0

x1 = x0 ^ y0

y1 = y0 ^ x1 = y0 ^ (x0 ^ y0) = x0   (mit Wahrheitstabelle leicht zu zeigen)

x2 = x1 ^ y1 = (x0 ^ y0) ^ x0 = y0   (dasselbe in Grün)

Was für einzelne Bits gilt, gilt auch für Bitfolgen. Also ist am Ende x2 = y0 und y1 = x0; wenn du also die Variablen x und y jeweils überschreibst, tauschen sie durch die drei Operationen ihre Werte.

See ya up the road,
Gunnar

--
„Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)