没有第三个变量如何交换?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有第三个变量如何交换?相关的知识,希望对你有一定的参考价值。

我必须使用数值交换两个变量而不使用第三个变量。什么是简单的解决方案?

答案

让我们看一个方法就是使用算术运算符。考虑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

另一答案

你可以用XOR实现它

int A = ...;
int B = ...;
A = A ^ B;
B = A ^ B;
A = A ^ B;
另一答案

根据变量的类型,您可以使用Interlocked.Exchange。这使用原子操作来进行交换。

另一答案
 int x = 15;
 int y = 5;

 x = x + y;
 y = x - y;
 x = x - y; 
另一答案

另一种流行的方式是XOR交换策略。 http://en.wikipedia.org/wiki/XOR_swap_algorithm

另一答案

这里我们在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

以上是关于没有第三个变量如何交换?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不介入第三个变量的情况下实现两个数的交换

如何不用第三个变量实现两个数的交换

交换两个数的值,不适用第三个变量

你什么时候不用第三个变量交换两个数字?

Golang中交换两个变量的值,但是不允许使用第三个变量?

不借助第三个变量实现两个变量交换的思考