Pages: [1]   Go Down
Author Topic: invertire 2 variabili a=b b=a  (Read 446 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 4
Posts: 408
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

altre soluzioni non credo esistano.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con i puntatori?
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con i puntatori?
Te ne serve uno comunque di appoggio per mantenere uno dei due valori..
Ciao
Logged

0
Online Online
Shannon Member
****
Karma: 132
Posts: 10508
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si può fare usando un pò di matematica e facendo attenzione agli overflow:

Code:
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:
void swap2(int &x, int &y)
{
        x ^= y ^= x ^= y;
}
« Last Edit: May 20, 2012, 10:51:35 am by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Tuscany
Offline Offline
Edison Member
*
Karma: 80
Posts: 2169
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 c'e' anche l'XOR

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

Tuscany
Offline Offline
Edison Member
*
Karma: 80
Posts: 2169
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@lesto mi ha preceduto

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

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

Pages: [1]   Go Up
Jump to: