异或交换数据
设 a = 10
, b = 20
, 使用异或交换数据
代码如下:
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a = " + a + ", b = " + b);
将返回结果为:a = 20
, b = 10
异或操作
异或操作是将两个数进行比较,相同为0, 不相同则返回1。如:
1
^0
= 1不相同异或,则为壹
0
^0
= 0相同异或,则为零
1
^1
= 0相同异或,则为零
白话:相同的数做异或,会相互抵消掉
int n1 = 100;
int n2 = 100;
System.out.println(n1 ^ n2);
// output: 0
交换解读
将a
和b
,设为:a = 基尼太煤
, b = 你干嘛
。
-
a = a ^ b
其中:
a ^ b
= 基尼太煤 ^ 你干嘛,改变a的值为:基尼太煤 ^ 你干嘛,b保持不变 -
b = a ^ b
其中:
a ^ b
= 基尼太煤 ^ 你干嘛 ^ 你干嘛,因为相同异或,相互抵消
,则改变b的值为:基尼太煤,a的值为上一步 -
a = a ^ b
其中:
a ^ b
= 基尼太煤 ^ 你干嘛 ^ 基尼太煤,因此与上一步相同,基尼太煤两个互相抵消,则a的值为:你干嘛
至此,将a和b的值进行互换。
开篇代码:
a = a ^ b;
b = a ^ b;
a = a ^ b;
将 a = 10, b = 20
代入就知道答案了。
文尾
使用编程语言:java
public class ExclusiveOR {
public static void main(String[] args) {
int a = 10;
int b = 20;
a = a ^ b; // a^b = 10 ^ 20, a = 10 ^ 20
b = a ^ b; // a^b = 10 ^ 20 ^ 20, b = 10
a = a ^ b; // a^b = 10 ^ 20 ^10, a = 20
System.out.println("a = " + a + ", b = " + b);
}
}
作者:PYmili