Simple programming trick

How do we swap values of two integer variables?

Normally we will introduce a third variable as the temporay storage. For example in C/C++:

int a = 123456;
int b = 567890;
int temp;

temp = a;
a = b;
b = temp;

Ok the question now is: How do we swap values of two integer variables without third variable?

Here is the trick:

int a = 123456;
int b = 567890;

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

Don’t believe? You can try it out yourself.
Note:

  • only for integer values (eg. 8, 16, 32, 64 bits integers)
  • ^ means eXclusive OR (XOR)

Explaination:
When a value is XOR with another value, the result is actually “storing” value of two values. When one of the original value is XOR again with the result value, you will get the another value. For example:

int a = 123;
int b = 456;
int resultOfXOR;

resultOfXOR = a ^ b; // "storing" 2 values

resultOfXOR ^ a; // return value of b
resultOfXOR ^ b; // return value of a

From the above code

int a = 123456;
int b = 567890;

a ^= b; // storing a^b into a. a becomes result of XOR
b ^= a; // get value of original a by resultOfXOR^b and store into b. Now b = 123456.
a ^= b; // get value of original b by resultOfXOR^b and store into a. Now a = 567890.

// Finally b = 123456 and a = 567890

That’s the beauty of XOR.

Share this article

  • digg
  • del.icio.us
  • Fark
  • Furl
  • Spurl
  • BlinkList
  • YahooMyWeb
  • Simpy
  • blinkbits
  • Digg
  • Facebook
  • Google
  • Live
  • Technorati
  • blogmarks

2 Responses to “Simple programming trick”

  • Kuzco
    February 26th, 2006, 8:58 am

    awesome!

  • mypapit
    February 26th, 2006, 2:08 pm

    nice article, I’m not aware that we can do that with XOR

 

Leave a Reply