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)
alles versucht, so weit? –
Welche Art von Variablen? – khelwood