Variablen mit XOR tauschen

2010-03-30

Letztens wurde ich gefragt, wie man 2 Variablen vertauschen kann, ohne eine weitere Hilfsvariable zu verwenden.

Nach einer Weile bin ich darauf gestoßen. Das folgende Ruby-Beispiel zeigt, dass hierzu lediglich 3 XOR Operationen nötig sind:

y=887; x=345
x=x^y
y=x^y
x=x^y
puts x // => 887
puts y // => 345

Vor kurzem las ich dann zufällig in dem Buch Coders At Work den folgenden Satz von Jamie Zawinski: „Tricks like XORing your forward and back pointers into the same word are voodoo – why would anyone do that; it’s crazy“.

Ich kann ihm da nur Recht geben. Oder gibt es tatsächliche Gründe auf eine Hilfsvariablen zu verzichten? Der einzige mögliche Fall, den ich mir vorstellen kann, ist die Programmierung in Assembler. Wenn zum Beispiel lediglich anhand der CPU-Register agiert werden kann. Oder gibt es noch weitere Gründe?