i = i + j ;
j = i - j ;
i = i - j ;
上面的代码是做什么的?有人可以用其他代码编写相同的操作吗?
谢谢。
最佳答案
这是一种在不创建临时变量的情况下交换i
和j
值的技术。这是内存优化的一种形式
如果您有兴趣了解其中一些内容,我找到了一个关于交换值的网站:
另一种交换值的方法是使用按位运算符异或 (XOR)
a = a ^ b
b = a ^ b
a = a ^ b
我个人最喜欢这种方式,因为从概念上考虑更有趣。整数是位的集合,(1 和 0)
一个 64 位整数有 64 个“1 和 0”
1 和 0 是二进制的。
1 = 1
10 = 2
11 = 3
100 = 4
101 = 5
111 = 6
这是一个二进制到十进制的例子。现在,按位运算符 XOR 就像拨动开关一样工作。所以:
2 ^ 1 = 3:二进制:10 ^ 01 = 11
和
3 ^ 2 = 1:二进制:11 ^ 10 = 01 = 1
现在您已经了解了这一点,您可以了解如何使用它交换变量。
让我们设置 a = 3
和 b = 2
(二进制)并尝试一下
一=100
b = 10
a = a ^ b::a = 100 ^ 10 = 110
b = a ^ b::b = 110 ^ 10 = 100
a = a ^ b::a = 110 ^ 100 = 10
现在 a = 10
和 b = 100
或 a = 2
和 b = 3
欢迎来到位!
关于java - 以下代码的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145357/