I'd be wary of using that one line solution, since it can be interpretted two different ways by the compiler. If it evaluates right to left then it will set x = y first, then subtract that from x + y, which is now y + y, and you'll end up with y = y and x = y. Of course, I realize that you aren't suggesting actually using such code, but I thought that should be pointed out.
I suppose it might be interpreted different ways by different compilers, but my understanding of parenthesis is that inner most parens are always evaluated first, thats why i have doubled parens around x + y. So I'm PRETTY sure this would work on any correct compiler.
]]>However, what I like about TheDude's method is you could use it in assembly to swap the values in two registers without having to use an extra one. Pretty cool!
Does anyone else have any fun code wielding challenges? post them here!
]]>if you use the normal method of copying it into a temporary variable, you use 3 int size's memory.
if you use your solution you still have to use at minimum, 3 int size's memory
its still interesting to see things like this though is it possible to not use any extra memory? perhaps with a restriction on the values of the integers.
]]>Well here's for how to do it in one line.
]]>Now, can you do it in one line of code?
]]>x = x + y;
y = x - y;
x = x - y;
suppose you have two integer values a and b stored in two int variables x and y
int x = a;
int y = b;
normally, if we want to swap the values in these two variables, we need to instantiate a temporary variable to save one of the values during the swap
int temp = x;
x = y;
y = temp;
BUT can YOU think of a way, in Java or C++, to swap the two int values without creating an additional variable?
You may use as many lines of code as you wish but you may not use loops or if statements or the like. You may not call any predefined functions of course. You may use boolean, arrithmetic or logical operators if you wish.
I have tested my solution in both C++ and java to make sure they worked.
]]>