XOR 运算符
Coddy 位运算 课程的第 6 课,共 17 课。
XOR(^)运算符
按位 XOR 运算需要两个长度相等的位模式。如果长度不相等,就在较短位模式的最高有效位(MSB)前补 0。如果两个位模式在被比较的位置上的位相同,结果位模式中的对应位就是 0,否则就是 1。
使用符号 '^' 表示 XOR 运算。
在数学表达中,我们使用 '⊕' 表示 XOR。因此,有些问题中你也可能会遇到这个符号。现在,我们来列一张表,看看 XOR 运算符对两个位的所有可能组合会返回什么结果。
| x | 0 | 0 | 1 | 1 |
| y | 0 | 1 | 0 | 1 |
| x ^ y | 0 | 1 | 1 | 0 |
我们来看一个例子,更好地理解这个运算:

在上面的例子中,我们对 (11)10 和 (2)10 进行了 XOR 运算,结果是 (9)10。我们只需把这些数字写成二进制形式,然后比较对应的两位,并按照上面对 XOR 运算的定义进行计算。
用法:
int a = 1;
int b = 0;
>> a ^ b
OUTPUT: 1接下来介绍 XOR 的一些性质。如果你还不知道这些性质,掌握它们能让你更快地解答 XOR 相关问题。
XOR 的一些重要性质
- x ⊕ 0 = x - 一个数与 0 进行 XOR 运算,结果还是这个数。
- x ⊕ x = 0 - 一个数与自身进行 XOR 运算,结果是 0。
- 设有两个数 x 和 y。假设 x ⊕ y = z,那么 x ⊕ z = y 和 y ⊕ z = x 也成立。
挑战
中等Sean 喜欢穿袜子,也喜欢在衣柜里收藏各种时髦的袜子。他把袜子按上面的数字区分。例如,(1,1)、(10, 10) 分别表示两双袜子。不幸的是,有一天一只猫闯进他的衣柜,叼走了一只袜子。衣柜里剩下的袜子会以数组的形式提供给你,请完成函数 MissingSock,找出猫叼走的是哪只袜子。
例如:
衣柜里原本有 6 只袜子:1, 1, 2, 3, 3, 2,
- 有 2 只数字为
1的袜子 - 有 2 只数字为
2的袜子 - 有 2 只数字为
3的袜子
猫来过后叼走了一只数字为 1 的袜子。现在的输入是:1, 2, 3, 3, 2,因为少了一只数字为 1 的袜子。挑战是找出缺少的袜子(输出应该是 1,因为缺少的袜子就是它)
亲手试试
#include <iostream>
#include <vector>
using namespace std;
int MissingSock(vector<int> socks) {
// 在这里编写代码
}位运算中的所有课
自己练习: C++ 在线编译器
检查进制转换: 进制转换器