2017-02-24 1 views

Antwort

1

XOR, p^q kann das und (&) ausgedrückt werden, oder (|) und nicht/Invertzucker (~) bitweise Operatoren wie (p & q) | ~(p & q) (siehe Wikipedia exclusive or Artikel). Daher können wir jetzt ein XOR mit den anderen bitweisen Operatoren simulieren, um den üblichen Austausch durchzuführen.

int x = 1; 
int y = 2; 
x = (x & y) | ~(x & y); 
y = (y & x) | ~(y & x); 
x = (x & y) | ~(x & y); 

Obwohl Anmerkung Java temporäre Variablen erstellen wird die Zwischenwerte in dem Ausdruck zu speichern (z. B. die Ergebnisse von x & y), so in der Praxis oder auf reale Architekturen dies langsamer ist als nur eine Variable in einem temporären Speicherung, aber aus einer theoretischen Perspektive kann es Ihre Frage befriedigen.

Beachten Sie, dass @ ytoamns Antwort eine bessere Lösung als meine ist, da die JVM keine zusätzlichen temporären Variablen zum Speichern von Zwischenteilen von Ausdrücken erstellen muss. (Und ist nicht nur ein XOR-Problem zu umgehen)

+0

Vielen Dank, das ist, was ich suchte – Deploymental

+0

@ ytoamn ist kein Problem, obwohl die Antwort wahrscheinlich besser ist, wenn Sie XOR mit Provisorien imitieren wollen :) –

+0

Ja, aber er antwortet auf seine eigene Frage, nicht meins, und zeigte nicht mir etwas neues – Deploymental

1

1 Weg, um eine dritte Variable verwendet, die andere mit Addition und Subtraktion

a = 10, b = 7 

a = a - b ; // a = 3 
b = b + a ; // b = 10 
a = b - a ; // a = 7 
Verwandte Themen