我必须使用数值交换两个变量而不使用第三个变量。什么是简单的解决方案?
答案 0 :(得分:18)
让我们看一个方法即使用算术运算符。
考虑2个变量,例如x = 50和y = 70,让我们看看如何在不使用第三个变量的情况下交换两个变量的值,即x = 70和y = 50。这可以通过使用以下算术运算来完成
x = x + y
y = x - y
x = x - y
这使
•x = x + y给出x = 70 + 50,因此x等于120
•y = x - y给出y = 120 - 70,这使得y的值为50
·x = x-y给出x = 120-50,因此x的值变为70
答案 1 :(得分:11)
你可以用XOR
来实现它int A = ...;
int B = ...;
A = A ^ B;
B = A ^ B;
A = A ^ B;
答案 2 :(得分:5)
根据变量的类型,您可以使用Interlocked.Exchange。这使用原子操作来进行交换。
答案 3 :(得分:4)
int x = 15;
int y = 5;
x = x + y;
y = x - y;
x = x - y;
答案 4 :(得分:2)
另一种流行的方式是XOR交换策略。 http://en.wikipedia.org/wiki/XOR_swap_algorithm
答案 5 :(得分:1)
这里我们在MIPS汇编程序中有这个。第一个解决方案是漫长而糟糕的。第二个XOR更好。
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