JAVA 通过 ^ (亦或)交换两个数的值
- 上代码:
int a = 4;
int b = 5;
a = a ^ b; //1式
b = a ^ b; //2式
a = a ^ b; //3式
通过上述代码即可交换 a 和 b 的值。
-
原理详解:(需要部分离散的基础知识)
我们将交换值的代码分别记为 1 2 3 式。使用离散数学符号来进行运算。下面式子中出现的 ⊕ 等同于代码中的 ^- 将1式带入2式中:
b = (a⊕b) ⊕ b;
由于⊕运算满足结合律,所以上式可写为:
b = a⊕ (b ⊕ b);
计算机中存储的是一个数的二进制补码,所以一个数与自己进行 ⊕ 运算,每一位上的值都相同,运算结果每一位上都是0(⊕运算规则:相同为0,不同为1;与⊙(同或相反))上式即可写为:
b = a⊕0。
一个数与 0 进行 ⊕ 运算,根据 ⊕ 运算规则,该数中原来为 0 的位还为 0 ,为 1 的位还为 1,说白了就是它本身。所以上式 :
b = a; //4式
- 将 1 式和 4 式代入 3 式中,可得:
b = (a⊕ b) ⊕ b;
参考第一步中 2 式中的转换,易得:
a = b;
至此完成值的交换。如果发现错误或有疑问,请留言,谢谢。