Go Down

Topic: invertire 2 variabili a=b b=a (Read 456 times) previous topic - next topic

ilmandorlone

salve ho una domanda veloce.
ho una variabile "a" e un "b"
esempio:
a=3
b=5
devo invertire in modo che diventi:
a=5
b=3
se io uso
a=b
b=a
"a" mi diventerà 5 ma "b" resterà 5
lo so che potrei usare altre due variabili per ricordare ma volevo un codice più pulito evitando aggrovigliamenti di codice

critical

Te ne basta solo una:
temp = a;
a = b;
b = temp;

altre soluzioni non credo esistano.

brexino


critical


Con i puntatori?

Te ne serve uno comunque di appoggio per mantenere uno dei due valori..
Ciao

lesto

#4
May 20, 2012, 05:49 pm Last Edit: May 20, 2012, 05:51 pm by lesto Reason: 1
si può fare usando un pò di matematica e facendo attenzione agli overflow:

Code: [Select]
void swap(int &x, int &y)
{
   x -= y;
   y += x;         // y gets the original value of x
   x = (y - x);    // x gets the original value of y
}


enjoy

edit da: http://devmaster.net/forums/topic/266-swapping-two-variables-without-using-a-temp-var/

fighissima la
Code: [Select]
void swap2(int &x, int &y)
{
        x ^= y ^= x ^= y;
}
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Brunello

c'e' anche l'XOR

  a ^= b;
  b ^= a;
  a ^= b;

Brunello

@lesto mi ha preceduto

a ^= b ^= a ^= b ; // swap (a,b)

Figo... non ci avevo mai pensato di metterlo in una sola riga

Go Up