位运算的辉煌:通过异或实现代码优化

一、基本概念

异或是一种二进制的位运算,符号以 XOR 或 ^ 表示。
异或运算可以看作是模2加法,其结果等于对应位相加取模2。
A XOR B = (A + B) mod 2。

二、运算规则

相同值异或结果为0,不同值异或结果为1:

当两个输入位相同时,异或的结果为0。
当两个输入位不同时,异或的结果为1。

ABA XOR B
000
011
101
110

三、基本特性

交换律:即A^B = B ^ A。
结合律:( A ^ B ) ^ C = A ^ ( B ^ C )
自反性: A ^ B ^ B = A (由结合律可推: A ^ B ^ B = A ^ ( B ^ B ) = A ^ 0 = A)
零元素:任何二进制数与零异或,都会等于其本身。A ^ 0 = 0。
逆元素:对于任意值A,A ^ A = 0,因此A的逆元素是它本身。

四、应用场景

1.交换两个数

public class SwapExample {
    public static void main(String[] args) {
        int a = 5;
        int b = 7;

        System.out.println("Before swapping: a = " + a + ", b = " + b);

        // Swap using XOR
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;

        System.out.println("After swapping: a = " + a + ", b = " + b);
    }
}

在这里插入图片描述

2. 排除偶次重复

public class Test {
    public static void main(String[] args) {
        // 异或方法:将所有整数异或,出现偶数次的整数会被抵消,最终留下不重复整数。
        int result = 0;
        int[] nums = new int[]{1,3,2,3,4,2,4};
        for (int index = 0; index < nums.length; index++) {
            result = result ^nums[index];
        }
        System.out.println(result);
    }
}

在这里插入图片描述

3. 加密运算

public class Example {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个英文字符串或解密字符串");
        String password = scanner.nextLine();
        char[] chars = password.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            chars[i] = (char) (chars[i] ^ 20000);
        }
        System.out.println("加密或解密结果如下:");
        System.out.println(new String(chars));
    }
}

在这里插入图片描述

4. 校验和和错误检测

异或运算在计算机通信中用于生成校验和,以便检测数据传输中的错误。在数据包传输过程中,发送方将数据的各个部分进行异或运算,将结果附加到数据包中。接收方对接收到的数据再次进行异或运算,如果结果为0,则表明数据传输无误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值