首页 > 其他分享 >不借助第三个变量,交换两个数。(使用异或^)

不借助第三个变量,交换两个数。(使用异或^)

时间:2022-10-29 14:35:57浏览次数:53  
标签:arr 变量 int System 第三个 异或 println out

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

相关文章