Algorithm 在不使用第三个临时值的情况下交换2个数字

Algorithm 在不使用第三个临时值的情况下交换2个数字,algorithm,language-agnostic,Algorithm,Language Agnostic,我知道如何在不使用临时变量的情况下交换2个数字。但若数字为负数,则该算法不起作用。如何在不使用第三个变量的情况下解决这个问题 a=a+b, b=a-b a=a-b 如果其中一个数字为负数,则无效。在这里,您可以找到不同的方法来交换两个变量中的值,而无需使用临时变量。它显示了优点和缺点 它展示了如何用6种编程语言实现这一点 从链接中提取以下方法: 加减法: x = x + y; y = x - y; x = x - y; 乘法和除法: x = x * y; y = x / y; x = x /

我知道如何在不使用临时变量的情况下交换2个数字。但若数字为负数,则该算法不起作用。如何在不使用第三个变量的情况下解决这个问题

a=a+b,
b=a-b
a=a-b
如果其中一个数字为负数,则无效。

在这里,您可以找到不同的方法来交换两个变量中的值,而无需使用临时变量。它显示了优点和缺点

它展示了如何用6种编程语言实现这一点

从链接中提取以下方法:

加减法:

x = x + y;
y = x - y;
x = x - y;
乘法和除法:

x = x * y;
y = x / y;
x = x / y;
异或:

按位运算和算术运算的混合:

a = (a & b) + (a | b);
b = a + (~b) + 1;
a = a + (~b) + 1;
第三行是a=a-b,它也适用于负数

x = x * y;

y = x / y; 

x = x / y;

仅对非零数有效。

此外,xor应该可以在没有临时变量的情况下交换变量,只需使用临时变量即可。所有避免临时性错误的聪明方法都有各种各样的问题。我刚刚运行了它,它对我有效。它对负数有效。仔细想想,把y=0,x*y容易溢出。我几天前开始积极使用stackoverflow,所以我在这里还是个新手。谢谢你的建议。我已经在我的答案中添加了链接中用于添加上下文的方法。
x = x * y;

y = x / y; 

x = x / y;