我不得不使用第三个变量将两个变量与一个数值交换。什么是简单的解决方案?如何在没有第三个变量的情况下进行交换?
回答
让我们看看其中一种方法,即使用算术运算符。 考虑2个变量,表示x = 50和y = 70,让我们看看如何交换两个变量的值,使x = 70和y = 50而不使用第三个变量。 Ÿ
X = X - - Ÿ
其中给出
•X = X + Y给出x这可以通过使用以下算术运算即
X = X + Y
Y = X来完成= 70 + 50,因此x等于120
y = x-y给出y = 120-70,其使得y的值为50
•x = x-y给出x = 120-50并且因此x的值变为70
另一种流行的方式是XOR交换策略。 http://en.wikipedia.org/wiki/XOR_swap_algorithm
这里我们在MIPS汇编器中有这个。第一种解决方案很长很糟糕。第二个与异或比较好。
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
根据变量的类型,可以使用Interlocked.Exchange。这使用原子操作来进行交换。
int x = 15;
int y = 5;
x = x + y;
y = x - y;
x = x - y;
可以与XOR
int A = ...;
int B = ...;
A = A^B;
B = A^B;
A = A^B;
@Bertrand,我只是做了一个“思维测试”,仍然认为没关系。如果A等于B,则在第一次赋值时,A的结果为0,则B赋值为0 XOR B即B,然后A赋值为0 XOR B,再次为B(这等于起始A) 。 – Fede 2011-03-17 20:57:03
A = 1,B = 1。步骤1:A = A^B = 1^1 = 0。步骤2:B = A^B = 0^1 = 1。第三步:A = A^B = 0^1 = 1。看起来它对我有用。 – 2011-03-17 21:42:58
- 1. 在不使用第三个变量的情况下交换两个整数
- 2. 在没有拆分的情况下在JavaScript中进行交换
- 3. 如何在不使用第三个变量的情况下交换两个数字?
- 4. 如何在不改变变量的情况下进行递归
- 5. 如何在没有使用makefile进行扩展的情况下回显变量
- 6. 如何在我的情况下对变量进行排序
- 7. 在没有第三方框架的情况下实现DI
- 8. 如何在没有列表的情况下循环变量
- 9. 如何在没有交互式控制台的情况下进行调试
- 10. 如何在没有softmax输出的情况下进行不相交分类?
- 11. 如何在没有第三方库的情况下在VB.net中绘制屏幕
- 12. 如何在没有选择的情况下进行左连接
- 13. 如何在没有pdb文件的情况下进行调试?
- 14. 如何在没有违规的情况下进行GROUP BY?
- 15. 如何在没有Visual Studio的情况下进行调试?
- 16. 如何在没有System.Web dll的情况下进行UrlDecode编程#
- 17. 如何在没有jQuery的情况下进行AJAX调用?
- 18. JikesRVM如何在没有第三方JVM支持的情况下工作?
- 19. 如何在没有JAR文件的情况下包含第三方类
- 20. 如何在没有第三方的情况下压缩/解压缩文件
- 21. 如何在没有第三方库的情况下完整解析HTML?
- 22. 如何在没有全局变量的情况下始终保持变量?
- 23. 我如何让3个圆圈在没有同时进行的情况下交替进行。不要使用CSS
- 24. 如何在第三个表中没有公共列的情况下连接三个表?
- 25. 如何在没有attr_accessible的情况下进行非质量分配?
- 26. 在没有轮询的情况下观察变量的变化
- 27. 如何在没有out或ref的情况下自行更改变量? C#
- 28. 在不使用临时变量的情况下交换类中的变量
- 29. 如何在没有向量的情况下改进这个C++程序?
- 30. 如何在不使用提交的情况下进行POST?
的[SWAP两个变量的值,而无需使用第三可变]可能重复(http://stackoverflow.com/questions/756750/swap-the实现它 - 值-的二变量,而无需-使用-第三变量)。另外[交换两个变量,而不使用临时变量](http://stackoverflow.com/questions/804706/swap-two-variables-without-using-a-temp-variable) – 2011-03-17 20:31:48
http://stackoverflow.com/questions/804706/swap-two-variables-without-using-a-temp-variable – Inisheer 2011-03-17 20:32:51
@我会在采访中看到一些使用这些东西的窍门。我不知道它是什么意思*证明*,但我已经看到它.. – ray 2017-06-02 22:18:48