sokrates
Goto Top

Besonderer Befehl in Java

Hallo,

hierbei handelt es sich um folgenden Befehl
^=

Diesen Befehl habe ich in einem Quellcode gefunden, der folgendes Prinzip umschrieb
Feld[1] = Feld[1] + Feld[2];
Feld[2] = Feld[1] - Feld[2];
Feld[1] = Feld[1] - Feld[2];

Mit dem Befehl sah das dann so aus
Feld[1] ^= Feld[2];
Feld[2] ^= Feld[1];
Feld[1] ^= Feld[2];


Ich habe nicht wirklich verstanden, was dieser Befehl macht.
Vielleicht weiß es ja einer von euch.

X

Content-ID: 124973

Url: https://administrator.de/contentid/124973

Ausgedruckt am: 25.11.2024 um 04:11 Uhr

Sokrates
Sokrates 15.09.2009 um 12:29:35 Uhr
Goto Top
Eine Sache noch zu ergänzen, die ich vergaß zu erwähnen:
Es ist relativ, welchen der beiden Methoden ich ausführe, bei beiden kommt das gleiche Ergebnis raus.

X
Kentarion
Kentarion 15.09.2009 um 12:47:25 Uhr
Goto Top
Sokrates
Sokrates 15.09.2009 um 13:15:40 Uhr
Goto Top

Das ist also quasi nur eine Vereinfachung?
Das heißt also die Feld[1]-Variable wird irgendwo gespeichert, die Feld[2] auf die erste geschrieben und der vorerst gespeicherte Wert dann vom neuen Feld[2] abgezogen.
Also wieder das obige System.

X
Kentarion
Kentarion 15.09.2009 um 13:50:41 Uhr
Goto Top
Vereinfacht wird es jetzt nur bedingt.

Man braucht keine Hilfsvariable bei dieser Methode und verwendet sozusagen einen Trick in dem man XOR der binären Daten anwendet.

du kannst dies mit einem einfachen Rechenbeispiel nachstellen.

Feld[1] = 1 = 0001, Feld[2] = 2 = 0010

Erste Operation:

0001 = Feld[1]
0010 = Feld[2]
XOR
0011 = Feld[1]

Zweite Operation:

0011 = Feld[1]
0010 = Feld[2]
XOR
0001 = Feld[2]

Dritte Operation:

0011 = Feld[1]
0001 = Feld[2]
XOR
0010 = Feld[1]

Und voila - die Werte sind vertauscht - Feld[1] = 2 = 0010 und Feld[2] = 1 = 0001


XOR Tabelle zur Erinnerung - siehe Link:

0 und 0 = 0
0 und 1 = 1
1 und 0 = 1
1 und 1 = 0

Einfach nachrechnen face-smile
AndreasHoster
AndreasHoster 15.09.2009 um 13:53:49 Uhr
Goto Top
Das heißt also die Feld[1]-Variable wird irgendwo gespeichert, die Feld[2] auf die erste geschrieben und der vorerst gespeicherte Wert dann vom neuen Feld[2] abgezogen.
Nein, macht er nicht. Und wie man nach Lektüre des Wikipedia Artikels auf die Idee kommen kann ist mir auch nicht klar. Vermutlich nicht gelesen, oder?
Er macht eine bitweise XOR Verknüpfung der beiden Werte.
Das bei entsprechenden Integerwerten es so aussehen kann wie oben ist richtig, aber er arbeitet anders.

Und ich würde Dir mal das Buch Thinking in Java empfehlen, gibts als kostenlosen Download hier: http://www.mindview.net/Books/TIJ/
Sokrates
Sokrates 15.09.2009 um 14:17:36 Uhr
Goto Top
Zitat von @Kentarion:
Vereinfacht wird es jetzt nur bedingt.

Man braucht keine Hilfsvariable bei dieser Methode und verwendet
sozusagen einen Trick in dem man XOR der binären Daten anwendet.

du kannst dies mit einem einfachen Rechenbeispiel nachstellen.

Feld[1] = 1 = 0001, Feld[2] = 2 = 0010

Erste Operation:

0001 = Feld[1]
0010 = Feld[2]
XOR
0011 = Feld[1]

Zweite Operation:

0011 = Feld[1]
0010 = Feld[2]
XOR
0001 = Feld[2]

Dritte Operation:

0011 = Feld[1]
0001 = Feld[2]
XOR
0010 = Feld[1]

Und voila - die Werte sind vertauscht - Feld[1] = 2 = 0010 und
Feld[2] = 1 = 0001


XOR Tabelle zur Erinnerung - siehe Link:

0 und 0 = 0
0 und 1 = 1
1 und 0 = 1
1 und 1 = 0

Einfach nachrechnen face-smile


Danke face-smile

X
Sokrates
Sokrates 15.09.2009 um 14:18:08 Uhr
Goto Top
Zitat von @AndreasHoster:
>Das heißt also die Feld[1]-Variable wird irgendwo
gespeichert, die Feld[2] auf die erste geschrieben und der vorerst
gespeicherte Wert dann vom neuen Feld[2] abgezogen.
Nein, macht er nicht. Und wie man nach Lektüre des Wikipedia
Artikels auf die Idee kommen kann ist mir auch nicht klar. Vermutlich
nicht gelesen, oder?
Er macht eine bitweise XOR Verknüpfung der beiden Werte.
Das bei entsprechenden Integerwerten es so aussehen kann wie oben ist
richtig, aber er arbeitet anders.

Und ich würde Dir mal das Buch Thinking in Java empfehlen, gibts
als kostenlosen Download hier: http://www.mindview.net/Books/TIJ/


Gelesen schon, nur handelt es sich bei mir nicht um einen fachspezifischen Informatik-Studenten sondern einen Oberstufenschüler.

X