Obfuscated C++

Manchmal kriege ich einen Knoten im Kopf, wenn ich mich durch fremden Code wühle. Preisfrage:

Wenn

int a = 17, b = 42;

wie sind dann nach

a ^= b ^= a ^= b;

die Werte für a und b?

Kann ja sein, dass solche Spielereien altbekannt sind; ich kannte sie noch nicht. Und übersichtlicher wird der Code dadurch auch nicht, oder?

Advertisements

3 Antworten zu “Obfuscated C++

  1. Hmm, wie vertausche ich die Werte zweier (integer) Variablen, ohne einen Zwischenspeicher zu verwenden? XOR für Rasterblits (i.e. mouse cursor) ist dir doch bestimmt bekannt?

  2. Herzlichen Glückwunsch, Sie haben gewonnen! :-)

    Ja, das ist ein Variablentausch ohne Zwischenspeichern. Kannte ich noch nicht, bevor es mir über den Weg gelaufen ist, und ist ja auch irgendwo elegant. Aber auch abartig zu lesen, oder? Wenn der Tausch nicht gerade in einer zentralen Schleife sitzt und hochperformant sein muss, dann nehme ich doch lieber stumpf einen „temp = b“-Zwischenschritt und stelle sicher, dass ich den Code auch in drei Monaten noch lesen kann — von meinen Mitprogrammierern mal ganz abgesehen. Oder ist das ein feststehender Ausdruck, und den erkennt man einfach?

    Jedenfalls ist mir da wieder aufgefallen, wie selten ich Bits schubsen muss im Leben.

  3. Wir hatten diese Schreibweise auch mal in der Schule angesprochen, würde es aber nie so machen.

    P.S.
    Der „XOR cursor“ ist übrigens patentiert.
    (Patent #4,197,590)

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s