1、异或运算简介
- 异或运算可以理解为
1、同零异一
2、无进位相加 - 异或运算满足的定律
N ^ 0 = N
N ^ N = 0
满足 交换律 和 结合律
a ^ b = b ^ a
a ^(b ^ c) = ( a ^ b) ^ c
一堆值进行异或运算,产生的结果,和异或运算的顺序无关
2、通过异或运算交换两数的值
/**
* 假设此时 arr[i] = 甲, arr[j] = 乙
* arr[i] = arr[i] ^ arr[j]; 此时 arr[i] = 甲 ^ 乙 ,arr[j] = 乙
* arr[j] = arr[i] ^ arr[j]; 此时 arr[i] = 甲 ^ 乙 , arr[j] = (甲 ^ 乙) ^ 乙 = 甲
* arr[i] = arr[i] ^ arr[j]; 此时 arr[i] = (甲 ^ 乙) ^ 甲 , arr[j] = 甲
* 通过这样的异或运算,则不通过添加变量就可以交换 两个变量的值
*
* 前提是 在内存中 两个变量的内存指向,必须为两块不同的内存
* 若两变量是同一块儿内存,则通过这三行异或运算,会使值变为 默认值,零
*/
例如通过下面代码可以交换arr [ i ] 和 arr [ j ] 的值
public static void swap2(int[] arr,int i,int j){
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}