2010-07-16 7 views
5

Es gibt zwei ganzzahlige Variablen. Können Sie diese Integer-Variablen ohne irgendwelche if-Bedingungen, ohne Casting und ohne Verwendung zusätzlicher Variablen austauschen? Zum Beispiel:Wie tauscht man zwei Integer-Variablen ohne irgendwelche if-Bedingungen, Casting oder zusätzliche Variablen aus?

int a = 10; 
int b = 5; 

a > b immer. Die Antwort sollte a == 5 und b == 10

+5

Nein, ich habe keine Ahnung, wie ein Problem zu verlangsamen oder es schneller machen. – BoltClock

+0

scheint eine Hausaufgabe zu sein, wenn das der Fall ist, sollten Sie es als solches markieren –

+3

Duplizieren: http://stackoverflow.com/questions/804706/swap-two-variables-without-using-a-temp-variable – Naveen

Antwort

13

Wenn Sie denken, Sie sind klug durch nicht dritte Variable dann tun einige Performance-Tests und Sie sehen, dass die viel schneller Weg ist, 3. int zu verwenden, um die Variable vorübergehend zu speichern.

Sowieso gelöst ich das Problem mit XOR Bit-Operator:

a ^= b; 
b ^= a; 
a ^= b; 
+0

Mehr über Swapping mit Xor ist hier http://en.wikipedia.org/wiki/XOR_swap_algorithm – Willmore

+0

Dies funktioniert nicht, wenn 'a = = b'. – Axoren

+0

Welche Sprache benutzen Sie? –

3

ja Sie können es tun, indem Sie plus/minus Operation.

Example: 
num1 = num1 + num2;     
num2 = num1 - num2;     
num1 = num1 - num2; 
+0

Bessere Addition/Subtraktion, um Überläufe und Rundungsprobleme zu vermeiden. Das heißt, es ist besser, nur eine temporäre Variable zu verwenden, aber immer noch. –

+0

Multiplizieren/Dividieren funktioniert nicht, wenn num2 0 ist. – pascal

+0

danke für die info ans jetzt aktualisiert –

10
a=a+b; 
b=a-b; 
a=a-b; 
4

Es ist ein kleiner Trick.

int a = 5; 
int b= 10; 
a = a+b; 
b = a-b; /* Really (a+b) - b i.e. a */ 
a = a-b; /* Really (a+b) - a i.e. b */ 
3
a=a+b 
b=a-b 
a=a-b 

Das ist es!

3

einfach versuchen, dieses

a=a+b; 
b=a-b; 
a=a-b; 

und das ist es

Verwandte Themen