利用异或运算交换数组位置
注意:交换时下角标不能相同
异或运算性质:异或运算可以看作无进位相加
异或运算三大性质:
1.0 ^ N = N ; N ^ N = 0
2.满足交换律与结合率
3.任意个数输入的异或运算的结果与异或顺序无关
private static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];//arr[j] = arr[i] ^ arr[j] = arr[i] ^ arr[j] ^ arr[j] = arr[i]
arr[i] = arr[i] ^ arr[j];//arr[i] = arr[i] ^ arr[j] = arr[i] ^ arr[j] ^ arr[i] = arr[j]
}
返回某个数二进制表示下最右侧的1
int rigntOne = eor & (~eor + 1);//使eor中最右面的一位1保持为1,其余为次皆为0
评论区