Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   2 Variablen vertauschen (https://www.delphipraxis.net/15478-2-variablen-vertauschen.html)

HAF4ever 29. Jan 2004 15:56


2 Variablen vertauschen
 
Ich hab mir mal den Kopf darüber zerbrochen warum es nötig sein muss beim Tauschen der Werte zweier Variablen eine Hilfsvariable heranzuziehen.
:arrow: z.B.:
Code:
h:=x;
x:=y;
y:=h;
:coder: ich hab ein wenig herumgecoded und bin schließlich auf einen grünen zweig gekommen.
:arrow: hier der code:
Code:
x:=x xor y;
y:=x xor y;
x:=x xor y;

sakura 29. Jan 2004 16:21

Re: 2 Variablen vertauschen
 
Zitat:

Zitat von HAF4ever
ich hab ein wenig herumgecoded und bin schließlich auf einen grünen zweig gekommen

Nur wo ist der wirkliche Vorteil :gruebel: Der Computer muss dreimal rechnen :arrow: Zeitaufwand. In Assembler kommt Deine Lösung auf den folgenden Ansatz (X, Y sind vom Typ Integer):
Delphi-Quellcode:
  asm
    mov EAX, Y
    xor X, EAX
    mov EAX, X
    xor Y, EAX
    mov EAX, Y
    xor X, EAX
  end;
Dann doch lieber gleich so
Delphi-Quellcode:
  asm
    mov EAX, Y
    mov EBX, X
    mov Y, EBX
    mov X, EAX
  end;
...:cat:...

roderich 29. Jan 2004 16:26

Re: 2 Variablen vertauschen
 
Delphi-Quellcode:
Code:
x:=x xor y;
y:=x xor y;
x:=x xor y;
Das erinnert mich an die C-Programmierer, die auch in einer einzigen Zeile gleich ganz viel codieren können.
Damit gewinnst du vielleicht 1 Nanosekunde Ausführungszeit, dafür kann den Code in zwei Wochen keiner mehr verstehen.

choose 29. Jan 2004 16:59

Re: 2 Variablen vertauschen
 
Zitat:

Zitat von sakura
wo ist der wirkliche Vorteil :gruebel: [..] In Assembler[..]

Hallo sakura,

gerade bei der Arbeit mit der begrenzten Anzahl von Registern hat sich dieser alte ASM-Trick schon häufig bewähren können, ohne zusätzlich mit dem Stack oder einer Variablen arbeiten zu müssen, falls zwei GP-Register ausgetauscht werden sollten (hier EAX und EBX), was wesentlich (zeit-)aufwendiger wäre:
Code:
xor  EAX, EBX
xor  EBX, EAX
xor  EAX, EBX

Neg 29. Jan 2004 20:58

Re: 2 Variablen vertauschen
 
Der Kontrast zwischen dieser Lösung und deiner Signatur könnte kaum größer sein... :roll:

glkgereon 26. Mai 2004 15:58

Re: 2 Variablen vertauschen
 
könnte das einer für mich nichtassembler mal erklären?

was soll dieses y:= x xor y und so?

imn voraus: ich weiss was xor ist!!!

negaH 26. Mai 2004 16:40

Re: 2 Variablen vertauschen
 
Dann solltest du auch deine Frage selber beantworten können ;)

Gruß Hagen

glkgereon 26. Mai 2004 17:50

Re: 2 Variablen vertauschen
 
hä?

das heisst für mich:

Delphi-Quellcode:
x:= x oder y;
y:= x oder y;
x:= x oder y;
also oder heisst jetzt xor
aber wqarum sollte das vertauschen;

zb x:=x xor y, woher soller wissen ob jetzt x:=x oder x:=y????? :gruebel:

phXql 26. Mai 2004 17:57

Re: 2 Variablen vertauschen
 
xor ist kein normales oder (or), sondern ein exklusives oder (macht nen unterschied ;))

Chewie 26. Mai 2004 17:58

Re: 2 Variablen vertauschen
 
Mal dir einfach die Bitmuster auf ein Blatt und vollzieh den Tauschvorgang nach.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:06 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz