Go Down

Topic: invertire 2 variabili a=b b=a (Read 505 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;
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo" (J.S. S. architetto napoletano)

Brunello

@lesto mi ha preceduto

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

Figo... non ci avevo mai pensato di metterlo in una sola riga
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo" (J.S. S. architetto napoletano)

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy