📜  c++ 中的异或(1)

📅  最后修改于: 2023-12-03 15:29:52.252000             🧑  作者: Mango

C++ 中的异或

在 C++ 中,异或是一个二进制运算符。它的运算规则是:如果两个二进制位不同,则结果为 1,否则为 0。

在 C++ 中,异或运算符使用符号“^”,用来进行两个整数的异或操作。如下所示:

int a = 1, b = 2;
int c = a ^ b; // c 的值为 3

在上述代码中,变量 a 和 b 分别存储了整数值 1 和 2。在进行异或运算后,变量 c 存储了结果值 3。这个结果的二进制表示方式为 0011,表示两个二进制数 01 和 10 异或的结果。

除了以上简单的异或操作,异或运算还有很多实际应用。

异或的特性

异或运算有以下两个特性:

  1. 交换律:a ^ b = b ^ a

  2. 自身异或为零:a ^ a = 0

这两个特性进行异或运算时,可以提供很多优化的算法实现。常用的异或应用有以下几个方面。

交换两个数的值

在 C++ 中,可以使用异或运算符交换两个数的值。代码如下:

int a = 1, b = 2;
a = a ^ b;   // a = 3
b = a ^ b;   // b = 1
a = a ^ b;   // a = 2

在上述代码中,首先使用异或运算符得到了变量 a 和 b 的异或值,将其赋值给变量 a。接着使用异或运算符得到了变量 a 和 b 的异或值,将其赋值给变量 b。最后再次使用异或运算得到了变量 a 和 b 的异或值,将其赋值给变量 a,这样就完成了两个变量的值交换。

判断两个数是否相等

在 C++ 中,可以使用异或运算符判断两个数是否相等。代码如下:

int a = 1, b = 2;
bool c = (a ^ b) == 0;   // c 的值为 false

在上述代码中,首先使用异或运算符得到了变量 a 和 b 的异或值,将其与 0 比较,得到结果 false,这样就判断了变量 a 和 b 是否相等。

查找数组中出现一次的数字

在一个数组中,除了一个数字出现一次之外,其他数字都出现了两次。可以使用异或运算符查找出现一次的数字。具体做法如下:

  1. 将数组中所有的数进行异或操作,得到一个结果。

  2. 如果数组中有两个数出现了一次,那么它们的异或结果将不为 0。找到这个结果中第一个为 1 的二进制位。

  3. 将数组分为两个部分,一个部分的所有数在刚才找到的二进制位为 1,另一个部分的所有数在这个二进制位为 0。分成的两个部分分别进行异或操作,可以得到两个出现一次的数字。

代码如下:

int findSingle(int arr[], int size) {
    int result = 0;

    for (int i = 0; i < size; ++i) {
        result ^= arr[i];
    }

    return result;
}

在上述代码中,使用了一个函数 findSingle,在一个数组中查找出现一次的数字。

总结

在 C++ 中,异或运算符可以用来进行两数值的异或操作,也可以用来交换两个变量的值,判断两个数是否相等,查找数组中出现一次的数字等等。在实际开发中,不同的应用场景可以选择不同的方法。