Variablen vertauschen in C

Hallo.

Gibt es einen Befehl in C, mit dem man 2 Variablen vertauschen kann, oder braucht man dazu immer eine dritte?

Ich glaub Compiler brauchen nen Dummy (dritte Variable). in Assembler gibts Exchange (xchg)

xchg var1 var2

Hallo.

Gibt es einen Befehl in C, mit dem man 2
Variablen vertauschen kann, oder braucht
man dazu immer eine dritte?

Du brauchst immer eine dritte.

Hallo.

man braucht keine dritte Variable.
leider ist es schon etwas länger her,
als ich noch sehr viel in C programmiert habe.
Die Lösung geht irgendwie über
Verknüpfung.
D.h. wenn man 2 Bytes aus 2 Variablen
3 mal hintereinander mit einander
verknüpft, ist der Inhalt vertauscht
ohne zur Hilfenahme eines dritten Feldes.
Aus meiner Sicht kann man das gut in einer
Funktion lösen.
MfG
Karl Heinz Schmitz
[email protected]

Geht mit xor:

//(^ = xor-Oparator)
a := 55;
b := 66;
// jetzt vertauschen:
a := a ^ b;
b := a ^ b;
a := a ^ b;

// jetzt ist a == 66 und b == 55

mfg
Christof

Hallo.

Gibt es einen Befehl in C, mit dem man 2
Variablen vertauschen kann, oder braucht
man dazu immer eine dritte?

Geht mit xor:

//(^ = xor-Oparator)
a := 55;
b := 66;
// jetzt vertauschen:
a := a ^ b;
b := a ^ b;
a := a ^ b;

// jetzt ist a == 66 und b == 55

mfg
Christof

Geil!
Man lernt nie aus.
Hat jemand ausprobiert, welche Variante schneller ist?
Gruß
J.

ich weiss ja nicht, wie der compiler das umsetzt, aber ich denke mal, wenn man die funktion mit der dritten variable in asm direkt schreibt, ist das bestimmt die schnellste methode.

oder was denkt ihr ?

ne xor - operation dürfte ja wohl länger dauern.

cu dennis

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Würd ich nicht unbedingt sagen:
eine xor-Operation auf eine Registervariable geht in einem Takt !
Es kommt eigentlich darauf an, ob man die Variablen in Registern hat oder
erst aus dem Speicher holen muss.
Im Prinzip ist diese Diskussion aber heutzutage müssig, wer wird bei den
heutigen Prozessortakten und Hauptspeichermengen noch an Tricks
aus der Rechnersteinzeit denken !
Jede Sekunde, die ich dabei überlege, wird wahrscheinlich selbst bei noch
so guter Optimierung in der ganzen Lebenszeit des Programms
nicht mehr hereingeholt werden :smile:
(ganz abgesehen von den Optimierfähigkeiten, die heutige Compiler haben).

mfg
Christof

ich weiss ja nicht, wie der compiler das
umsetzt, aber ich denke mal, wenn man die
funktion mit der dritten variable in asm
direkt schreibt, ist das bestimmt die
schnellste methode.

oder was denkt ihr ?

ne xor - operation dürfte ja wohl länger
dauern.

cu dennis