Menu
CoddyTech

XOR 运算符

Coddy 位运算 课程的第 6 课,共 17 课。

XOR(^)运算符

按位 XOR 运算需要两个长度相等的位模式。如果长度不相等,就在较短位模式的最高有效位(MSB)前补 0。如果两个位模式在被比较的位置上的位相同,结果位模式中的对应位就是 0,否则就是 1。 

使用符号 '^' 表示 XOR 运算。 

在数学表达中,我们使用 '⊕' 表示 XOR。因此,有些问题中你也可能会遇到这个符号。现在,我们来列一张表,看看 XOR 运算符对两个位的所有可能组合会返回什么结果。

x0011
y0101
x ^ y0110

我们来看一个例子,更好地理解这个运算:

在上面的例子中,我们对 (11)10 和 (2)10 进行了 XOR 运算,结果是 (9)10。我们只需把这些数字写成二进制形式,然后比较对应的两位,并按照上面对 XOR 运算的定义进行计算。

用法:

int a = 1;
int b = 0;
>> a ^ b
OUTPUT: 1

接下来介绍 XOR 的一些性质。如果你还不知道这些性质,掌握它们能让你更快地解答 XOR 相关问题。

XOR 的一些重要性质

  1. x ⊕ 0 = x - 一个数与 0 进行 XOR 运算,结果还是这个数。
  2. x ⊕ x = 0 - 一个数与自身进行 XOR 运算,结果是 0。
  3. 设有两个数 x 和 y。假设 x ⊕ y = z,那么 x ⊕ z = y 和 y ⊕ z = x 也成立。
challenge icon

挑战

中等

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++ 在线编译器

检查进制转换: 进制转换器