int a = 19int 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. 可以是相同的数字,但是不能是相同内存地址。