算术交换有哪些不同版本,它们为何起作用?

What are the different versions of arithmetic swap and why do they work?

我想大家都应该熟悉算术交换算法,它交换两个变量而不使用第三个变量。现在我发现算术交换有两种变体。请考虑以下事项:

变体 1.

int a = 2;
int b = 3;
a = a + b;
b = a - b;
a = a - b;

变体 2.

int a = 2;
int b = 3;
b = b - a;
a = a + b;
b = a - b;

我想知道,为什么算术交换有两种截然不同的变体,它们为什么有效?算术交换还有其他变体可以达到相同的结果吗?它们有什么关系?是否有任何优雅的数学公式可以证明为什么算术交换对所有变化都如此工作?两次算术交换的这两种变体之间是否有任何关联,例如潜在的真相?

将每个变量分解为它代表的内容:

a = 2
b = 3
a1 = a + b
b1 = a1 - b = (a + b) - b = a
a2 = a1 - b1 = (a + b) - a = b
a = 2
b = 3
b1 = b - a
a1 = a + b1 = a + (b - a) = b
b2 = a1 - b1 = b - (b - a) = a

除了数学计算出来的事实之外,没有其他潜在的真理。请记住,每次您做作业时,它实际上都是数学方面的新 "variable"。