Possible Duplicate:
Why is this statement not working in java x ^= y ^= x ^= y;
Sample code
int a=3;
int b=4;
a^=(b^=(a^=b));
In c++ it swaps variables, but in java we get a=0, b=4 why?
Possible Duplicate:
Why is this statement not working in java x ^= y ^= x ^= y;
Sample code
int a=3;
int b=4;
a^=(b^=(a^=b));
In c++ it swaps variables, but in java we get a=0, b=4 why?
That's not guaranteed to work in C++ either. It's undefined behavior.
You should do it in three separate statements:
a ^= b;
b ^= a;
a ^= b;
By writing your swap all in one statement, you are relying on side effects of the inner a^=b
expression relative to the outer a^=(...)
expression. Your Java and C++ compilers are doing things differently.
In order to do the xor swap properly, you have to use at least two statements:
a ^= b;
a ^= (b ^= a);
However, the best way to swap variables is to do it the mundane way with a temporary variable, and let the compiler choose the best way to actually do it:
int t = a;
a = b;
b = t;
In the best case, the compiler will generate no code at all for the above swap, and will simply start treating the registers that hold a
and b
the other way around. You can't write any tricky xor code that beats no code at all.