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:
So, you can see how it get’s applied here:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #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.