正常来说,我们交换俩个数需要一个中间变量。用来暂存交换时的数。比如:
public static void main(String[] args) {
int[] arr = {11,22,33,44,55,66};
NormalTraversal(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
//利用设立临时值交换
public static void NormalTraversal(int[] arr){
int temp = 0;
for (int i = 0; i < arr.length/2; i++) {
temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
}
但是,我们如果不用临时变量可以进行数据的交换吗?
当然可以。所以我们需要使用 位运算符 ^
位运算符 ^ 异或的特点:
一个数被另一个数,异或俩次,该数本身不变
//利用位运算符进行值交换
public static void xor(int[] arr){
for (int i = 0; i < arr.length/2; i++) {
arr[i] = arr[arr.length-1-i]^arr[i];
arr[arr.length-1-i] =arr[i]^arr[arr.length-1-i]; // arr[i] ^ arr[arr.length-1-i] ^ arr[arr.length-1-i]
arr[i] = arr[i] ^ arr[arr.length-1-i]; // arr[length-1-i] ^ arr[i] ^ arr[i]
}
}
方法二:
a=a+b;
b=a-b;
a=a-b;