开发者

How to swap without a third variable?

I have to swap two variables with a number v开发者_StackOverflow中文版alue without using a third variable. What is the simple solution?


Let us see one of the method namely by using arithmetic operators. Consider 2 variables say x=50 and y=70 and let us see how to swap the value of two variables that is make x=70 and y=50 without using third variable. This can be done by using following arithmetic operations namely
x= x + y
y= x - y
x= x - y
Which gives
• x= x + y gives x= 70 + 50 an so x is equal to 120
• y= x - y gives y = 120 - 70 which makes the value of y as 50
• x= x - y gives x= 120 - 50 and thus value of x becomes 70


You can achieve it with XOR

int A = ...;
int B = ...;
A = A ^ B;
B = A ^ B;
A = A ^ B;


Depending on the type of variable, you can use Interlocked.Exchange. This uses an atomic operation to do the swap.


 int x = 15;
 int y = 5;

 x = x + y;
 y = x - y;
 x = x - y; 


Another popular way is the XOR swapping strategy. http://en.wikipedia.org/wiki/XOR_swap_algorithm


Here we have this in MIPS assembler. The first solution is long and bad. The second one with XOR is better.

addi $t0, $0, -5
addi $t1, $0, 15

add $t0, $t0, $t1
sub $t1, $t1, $t0
nor $t1, $0, $t1
addi $t1, $t1, 1
sub $t0, $t0, $t1

####

xor $t0, $t0, $t1
xor $t1, $t0, $t1
xor $t0, $t0, $t1
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜