异或特点
- 二进制位不同为true,相同为false
- 一个数被另外一个数异或两次,该数不变
- 两个相同的数异或结果为0!!!【因此不能让同一个变量自己和自己异或,会使得变量变为0】
交换变量数值
交换两个整数类型变量数值 代码
public class Xor {
public static void main(String[] args) {
int a = 10, b = 4;
a = a ^ b;
b = a ^ b; // b = (a ^ b) ^ b = a
a = a ^ b; // a = (a ^ b) ^ a = b
System.out.println("a: " + a);
System.out.println("b: " + b);
}
}
数组反转
- 方法1 通过第2个数组实现数组反转
- 方法2 通过上述交换变量数值的方法,将数组进行首尾数值交换,从而实现数组反转
数组反转 代码
public class ReverseArray {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
// arr = reverseArray(arr);
// reverse(arr);
reverse2(arr);
for (int item : arr) {
System.out.print(item + " ");
}
}
/*通过交换首尾数值,直接进行数组反转*/
public static void reverse(int[] arr) { // 实现方式1
int lim = arr.length / 2;
for (int i = 0; i < lim; i++) {
int j = arr.length - i - 1;
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
public static void reverse2(int[] arr) { // 实现方式2
int i = 0, j = arr.length - 1;
while(i != j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
++ i;
-- j;
}
}
/*利用第2个数组来实现数组反转*/
public static int[] reverseArray(int[] a) {
int[] ra = new int[a.length];
for (int i = 0; i < ra.length; i++) {
ra[i] = a[a.length - i - 1];
}
return ra;
}
}