Cheaper: Variablenwerte mit Xor vertauschen

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??

MfG Cheaper

  1. 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)
  2. 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??

    MfG Cheaper

    Hallo Cheaper,

    das Beispiel kommt aus meinem Java-Buch (http://www.galileodesign.de/openbook/javainsel5/javainsel02_007.htm#Rxx747java02007040000AE1F04E1E8) und wird dort auch ein wenig erklärt.

    In der Wikipedia http://en.wikipedia.org/wiki/XOR_swap_algorithm gibt's das aber noch mal ausführlicher.

    Grüße

    Christian | http://www.tutego.com/