Someone says this is an old lame trick. I think it’s simple and clever use of XOR.

How/Why does it work?

It’s built around the properties of the XOR ^ operator, who has the following properties:

  • A ^ B = B ^ A (commutative)
  • A ^ 0 = A
  • A ^ 1 = ~A
  • A ^ A = 0

So, you can see how it get’s applied here:

#include <stdio .h>
int main(void)
{
   unsigned int a, b;
   // ... populate somehow "a" and "b"...

   printf("a = %d - b = %d\n", a, b);

   a ^= b; // store in "a" the value of "a XOR b"
   b ^= a; // store in "b" the value of "a XOR b XOR b" = "a XOR 0" = "a"
   a ^= b; // store in "a" the velue of "a XOR b XOR a" = "b XOR 0" = "b"

   printf("a = %d - b = %d\n", a, b);
}

Neat.

Share this

  • del.icio.us
  • blogmarks
  • Digg
  • Google Bookmarks
  • Live
  • Reddit
  • Slashdot
  • Facebook
  • LinkedIn
  • MySpace
  • Tumblr
  • StumbleUpon
  • Wikio
  • email
  • Netvibes
  • Ping.fm
  • Print
  • Posterous
  • FriendFeed
  • Yahoo! Bookmarks