位异或^

#include <stdio.h>

int main()
{
    printf("1^0 = %d/n", 1^0);
    printf("1^1 = %d/n", 1^1);
    printf("0^0 = %d/n", 0^0);
}

---------------------------------
1^0 = 1
1^1 = 0
0^0 = 0


位异或
------------------------------
位异或: 二进制运算符^对两个操作数逐位进行比较,对于每个位,如果操作数中对应位有一个为1(但是不都为1),那么结果为1。


位异或的用法: 转置(toggling)
------------------------------
    转置一个位表示如果该位打开,则关闭该位;如果该位关闭,则打开该位。您可以使用"位异或"运算符来转置一个位。
    其思想是如果b是一个位(1或0),那么如果b为1则1^b为0,如果b为0则1^b为1。而且,无论b的值是0还是1,0^b为b。因此,如果使用^将一个值与掩码组合,那么该值中对应掩

码为1的位被转置,对应掩码位为0的位不改变。

   101   b
   111   MASK
--------------------
   010   b

### 按位异或运算符的作用 按位异或(XOR)运算符 `^` 是一种二元操作符,用于对两个整数的每一位执行 XOR 运算。如果对应位置上的两位相同,则结果为 0;如果不同,则结果为 1[^1]。 例如: ```python a = 5 # 二进制表示为 0101 b = 3 # 二进制表示为 0011 result = a ^ b # 结果为 0110 (即十进制的 6) print(result) # 输出 6 ``` 在这个例子中,`5` 和 `3` 的二进制形式逐位比较后得到的结果是 `6`。 --- ### 使用场景 #### 1. **交换变量值** 通过按位异或操作可以在不使用额外空间的情况下实现两个变量之间的值互换。 ```c int x = 7; int y = 3; x = x ^ y; // x 现在等于 4 (0111 ^ 0011 = 0100) y = x ^ y; // y 现在等于 7 (0100 ^ 0011 = 0111) x = x ^ y; // x 现在等于 3 (0100 ^ 0111 = 0011) // 此时 x=3, y=7 已完成交换 ``` 这种方法利用了 XOR 的特性:任何数与自己做 XOR 得到的是 0,而任何数与 0 做 XOR 不改变其值。 --- #### 2. **检测重复项** 在一个数组中找到唯一的一个未重复元素是一个经典的 XOR 应用案例。由于相同的数字经过两次 XOR 后会抵消掉,因此最终剩下的就是唯一的那个数。 ```python def find_unique(nums): result = 0 for num in nums: result ^= num return result nums = [4, 1, 2, 1, 2] unique_num = find_unique(nums) # 返回 4 ``` 在这里,所有成对出现的数字都被消除,仅留下单次出现的那个数字。 --- #### 3. **加密解密** XOR 可以用来简单地加解密数据流。假设有一个明文消息和一个随机生成的秘密键 K,可以通过如下方式加密并恢复原始信息: ```python key = 8 # 秘钥 message = 15 # 明文 encrypted_message = message ^ key # 加密后的消息 decrypted_message = encrypted_message ^ key # 解密还原原消息 print(f"Encrypted Message: {encrypted_message}") # Encrypted Message: 7 print(f"Decrypted Message: {decrypted_message}") # Decrypted Message: 15 ``` 这种技术基于 XOR 的逆向性质——再次应用同一个秘钥即可反转之前的变换。 --- #### 4. **奇偶校验** 在网络通信或者存储系统里常用的一种错误检测机制叫做奇偶校验码(Parity Bit),其中也经常涉及到了 XOR 计算来判断一组比特串中有多少个‘1’存在。这有助于发现传输过程中可能发生的单一比特翻转错误。 --- ### 总结 综上所述,按位异或不仅限于简单的数值计算,在实际开发中的许多领域都有广泛的应用价值,比如算法设计、密码学以及硬件电路等领域都离不开它的身影。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值