今天刷题刷到自己的知识盲区,在此记录
java:用异或操作实现交换
首先什么是异或?
(1)相同为0,不同为1,也就是不进位加发
(2)满足交换律,结合律
(3)N ^ 0 = N; N ^ N = 0;
eg:
用二进制解释就是:(不进位加法)
拆分来看就是:
根据异或的交换律特性,先看b ^ b的部分,任何数异或自己都等于0。
这时 a ^ 0 就等于a了,也就是b=a。
再看第三行代码
根据交换律,可以先看a ^ a = 0; b ^ b = 0;
这时 a = b ^ 0 ^ 0; 也就是a=b。
完成交换
上面这个解法只适用于a和b不在同一块区域,比如在一个数组中交换位置
如果交换a[1]与a[1]的位置,使用了上面的方法,最后a[1]的结果就会变成0。
需要特别注意!



