位运算-异或(^)

1 基本概念

1.1 符号

异或是一种二进制的位运算,符号以 XOR 或 ^ 表示。

1.2 运算规则

相同为0,不同为1,即(可以看做二进制下的不进位加法)

1 ^ 1 = 0

0 ^ 0 = 0

1 ^ 0 = 1

1.3 运算性质

  • 交换律: A ^ B = B ^ A

  • 结合律: ( A ^ B ) ^ C = A ^ ( B ^ C )

  • 自反性: A ^ B ^ B = A (由结合律可推: A ^ B ^ B = A ^ ( B ^ B ) = A ^ 0 = A)

  • x ^ x = 0 , x ^ 0 = x

  • x ^ -1 = ~x

2 运用

2.1 变量交换

// 常规方法
int tmp = a;  // temp = 3
a = b;         // a = 7
b = tmp;      // b = 3
 
// 异或方法
a = a ^ b;  // a = 3 ^ 7
b = a ^ b;  // b = (3 ^ 7) ^ 7 = 3 ^ (7 ^ 7) = 3
a = a ^ b;  // a = (3 ^ 7) ^ (3 ^ 7 ^ 7) = (3 ^ 3) ^ (7 ^ 7) ^ 7 = 7 

2.2 排除偶次重复

示例:在一个整数数组中,仅存在一个不重复的数字,其余数字均出现两次(或偶数次),找出不重复数字。

// 常规方法:通过二次循环找出不重复的数字
for (...) {
    for (...) {
        ...
    }
}
 
// 异或方法:将所有整数异或,出现偶数次的整数会被抵消,最终留下不重复整数。
int ans = 0;
for (int i = 1; i <= n; i++) {
    ans = ans ^ num[i];
}
return ans;

参考文献

posted @ 2024-03-28 13:29  Wh1sky  阅读(313)  评论(2)    收藏  举报