![]() |
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:
:coder: ich hab ein wenig herumgecoded und bin schließlich auf einen grünen zweig gekommen.
h:=x;
x:=y; y:=h; :arrow: hier der code:
Code:
x:=x xor y;
y:=x xor y; x:=x xor y; |
Re: 2 Variablen vertauschen
Zitat:
Delphi-Quellcode:
Dann doch lieber gleich so
asm
mov EAX, Y xor X, EAX mov EAX, X xor Y, EAX mov EAX, Y xor X, EAX end;
Delphi-Quellcode:
...:cat:...
asm
mov EAX, Y mov EBX, X mov Y, EBX mov X, EAX end; |
Re: 2 Variablen vertauschen
Delphi-Quellcode:
Das erinnert mich an die C-Programmierer, die auch in einer einzigen Zeile gleich ganz viel codieren können.
Code:
x:=x xor y; y:=x xor y; x:=x xor y; Damit gewinnst du vielleicht 1 Nanosekunde Ausführungszeit, dafür kann den Code in zwei Wochen keiner mehr verstehen. |
Re: 2 Variablen vertauschen
Zitat:
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 |
Re: 2 Variablen vertauschen
Der Kontrast zwischen dieser Lösung und deiner Signatur könnte kaum größer sein... :roll:
|
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!!! |
Re: 2 Variablen vertauschen
Dann solltest du auch deine Frage selber beantworten können ;)
Gruß Hagen |
Re: 2 Variablen vertauschen
hä?
das heisst für mich:
Delphi-Quellcode:
also oder heisst jetzt xor
x:= x oder y;
y:= x oder y; x:= x oder y; aber wqarum sollte das vertauschen; zb x:=x xor y, woher soller wissen ob jetzt x:=x oder x:=y????? :gruebel: |
Re: 2 Variablen vertauschen
xor ist kein normales oder (or), sondern ein exklusives oder (macht nen unterschied ;))
|
Re: 2 Variablen vertauschen
Mal dir einfach die Bitmuster auf ein Blatt und vollzieh den Tauschvorgang nach.
|
Re: 2 Variablen vertauschen
Nicht oder, sonder nicht oder.
Code:
Somit hätte x den Wert von y. Nur ist da bei mir gerade der Wert von y auf der Strecke geblieben. :gruebel:
x = 1010
y = 1011 x: 1010 y: 1011 xor ------- x= 0100 x: 0100 y: 1011 xor ------- y= 0000 x: 0100 y: 0000 xor ------- x= 1011 |
Re: 2 Variablen vertauschen
Ähm, Luckie, ich weiß nicht, welche Operation du da jetzt ausgeführt hast, aber in XOR ist das definitiv nicht...
Halt, jetzt sehe ich es, es ist ein NAND ;) Edit: Blödsinn, ich mein natürlich NOR :wall: |
Re: 2 Variablen vertauschen
ich kapier das zwar grundsätzlich, aber ich dachte xor wär das:
bedingung: if (x=1) xor (y=2)... ist gleich if ((x=1) and (y<>2)) or ((x<>1) and (y=2))... oder nit :gruebel: :gruebel: :gruebel: ich mein man kann ja auch nit sagen x=x and y, oder? |
Re: 2 Variablen vertauschen
Ersetze das "ist gleich" durch "ist äquivalent", und wir sind im Geschäft ;)
Das ist aber nicht die Definition von xor, sondern eine Anwendung. xor ist zunächst eine Operation, die zwei Bit-Operanden hat. Das Ergebnis dieser Operation ist nun 1, falls genau ein Bit 1 ist und sonst 0. Folgende Beispiele sollten es verdeutlichen:
Code:
Du kannst es auch als Addition ohne Berücksichtigung des Übertrags ansehen.
01011 xor
10101 ----- 11110 00101 xor 11100 ----- 11001 |
Re: 2 Variablen vertauschen
Öhm... Luckie? :gruebel:
Code:
Wäre wohl richtiger. :lol: ;)
x = 1010
y = 1011 x: 1010 y: 1011 xor ------- x= 0001 x: 0001 y: 1011 xor ------- y= 1010 x: 0001 y: 1010 xor ------- x= 1011 Chris |
Re: 2 Variablen vertauschen
D.h. sind zwei bits gleich, so ist das Ergebnis Null, anderenfalls ist es Eins.
|
Re: 2 Variablen vertauschen
Zitat:
Deswegen nennt man das Ding auch "Ambivalenzoperator", weil es ausdrückt, ob zwei Werte verschieden sind oder nicht. Die negierte Version davon, also das XNOR, wäre dann der "Äquivalenzoperator". |
Re: 2 Variablen vertauschen
kann ich denn jetzt sagen
x:= x and y??? |
Re: 2 Variablen vertauschen
Klar kannst du das sagen, die Frage ist nur, was du damit ausdrücken willst :gruebel:
|
Re: 2 Variablen vertauschen
Zitat:
Gruß Hagen |
Re: 2 Variablen vertauschen
Zitat:
Code:
Haaaa, habs:
1 or 0 = 1
0 or 1 = 1 0 or 0 = 0 1 or 1 = 1
Code:
oder?
1 xor 1 = 0
Zitat:
|
Re: 2 Variablen vertauschen
Hi,
Zitat:
Chris |
Re: 2 Variablen vertauschen
or = oder
xor = entweder, oder |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz