package class02; import java.util.Arrays; /** * 不借助第三个变量,交换两个数。(使用异或^) * 异或(^):相同为0,不同为1。 * 记为:无进位相加。 */ public class Code1_Swap { public static void main(String[] args) { int a = 2; int b = 3; System.out.println(a); System.out.println(b); a = a ^ b; b = a ^ b; a = a ^ b; System.out.println(a); System.out.println(b); System.out.println("====================================="); int[] arr = {5, 6, 7, 8, 9}; int i = 2; int j = 4; arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; System.out.println("arr = " + Arrays.toString(arr));//arr = [5, 6, 9, 8, 7] //当i和j不同时,即索引位置不同时,也就是要交换的两个数,所指向的地址,不是同一个地址时, //使用异或运算,完成交换,是正确的。 //如果要交换的两个数,所指向的地址,是同一个地址时,使用异或运算,完成交换,是错误的。 //错误的结果就是,两个数都被刷成了0。如下: int n = 3; int m = 3; arr[n] = arr[n] ^ arr[m]; arr[m] = arr[n] ^ arr[m]; arr[n] = arr[n] ^ arr[m]; System.out.println("arr = " + Arrays.toString(arr));//arr = [5, 6, 9, 0, 7] } }
标签:arr,变量,int,System,第三个,异或,println,out From: https://www.cnblogs.com/TheFloorIsNotTooHot/p/16838665.html