Java代码
class Demo{
public static void main(String[] args){
int a = 1;
int b = 5;
a = a^b;
b = a^b;
a = a^b;
System.out.println(a+"---"+b);
}
}
打印结果为a = 5, b = 1
知识点
异或操作就是二进制位上两数相同为false(0), 两数不同为true(1)
a = 1的二进制码形式为
0000-0000 0000-0000 0000-0000 0000-0001
b = 5的二进制码形式为
0000-0000 0000-0000 0000-0000 0000-0101
a ^ b结果为
0000-0000 0000-0000 0000-0000 0000-0100
(a ^ b) ^ b结果为
0000-0000 0000-0000 0000-0000 0000-0001
结果还是a本身, 于是得到另一个结论:
一个数a异或另一个数b两次, 结果还是a
过程分析
第1步
a = a ^ b 此时, a的新值即为 a ^ b
第2步
b = a ^ b 就相当于 (a ^ b) ^ b, 结果还是a (a异或了b两次)
第3步
a = a ^ b 此时a的值经过第1步赋值是(a ^ b), b的值经过第2步赋值是a
所以, a = a ^ b 即为 (a ^ b) ^ a, 等价于 (b ^ a) ^ a, 结果是b
所以, 最后结果是a与b互换了值