Warum mit xor tauschen funktioniert gut in C ++, aber in Java nicht? etwas Puzzle [Duplikat]

8

Beispielcode

%Vor%

In c ++ werden Variablen vertauscht, aber in Java erhalten wir a = 0, b = 4 warum?

    
Andrei N 12.10.2010, 08:15
quelle

2 Antworten

17

Wenn Sie Ihren swap all-in-one-Befehl schreiben, verlassen Sie sich auf die Nebenwirkungen des inneren a^=b -Ausdrucks relativ zum äußeren a^=(...) -Ausdruck. Ihre Java und C ++ Compiler machen Dinge anders.

Um den xor-Austausch richtig durchzuführen, müssen Sie mindestens zwei Anweisungen verwenden:

%Vor%

Der beste Weg, um Variablen zu tauschen, ist jedoch, den banalen Weg mit einer temporären Variable zu gehen und den Compiler den besten Weg wählen zu lassen:

%Vor%

Im besten Fall erzeugt der Compiler überhaupt keinen Code für den obigen Austausch und beginnt einfach damit, die Register zu behandeln, die a und b enthalten. Sie können keinen komplizierten Xor-Code schreiben, der überhaupt keinen Code schlägt.

    
Greg Hewgill 12.10.2010, 08:19
quelle
7

Das funktioniert auch nicht in C ++. Es ist undefiniertes Verhalten.

Sie sollten es in drei separaten Anweisungen tun:

%Vor%     
reko_t 12.10.2010 08:18
quelle

Tags und Links