int a = 19
int b = 33
交换
正常代码
int a = 19;
int b = 33;
int tmp = 0;
tmp = a;
a = b;
b = tmp;
这个代码都见过,都写过
使用如下代码
int a = 19;
int b = 33;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(a);
System.out.println(b);
分析
假设a = x ; b = y;
a = a ^ b ; 等价于 a = x ^ y; b = y;
b = a ^ b; 等价于 b = xyy; 因为y^y = 0 x^0 = x 所以b = x
a = a ^ b; 等价于 a = xyx; 所以a = y
完成了转换
// i和j是一个位置的话,会出错
public static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
这里要注意,i和j 不能指向同一个内存地址。否则会导致成0. 可以是相同的数字,但是不能是相同内存地址。