位集之间的c ++ XOR

时间:2017-07-06 12:22:14

标签: c++ xor operation std-bitset

std::bitset <1> a1;
std::bitset <1> a2;

a1 = std::bitset<1> (0);
a2 = std::bitset<1> (1);

std::bitset<1> b = (a1 ^= a2)

这导致

b = 1

这很好,但也修改了a1,在XOR操作后变为:

a1 = 1

为什么会这样? 如何在不创建 temp 变量的情况下避免这种情况?

3 个答案:

答案 0 :(得分:2)

#include <iostream>
#include <bitset>
using namespace std;
int main()
{
    std::bitset <1> a1;
    std::bitset <1> a2;

    a1 = std::bitset<1>(0);
    a2 = std::bitset<1>(1);

    std::bitset<1> b = (a1 ^ a2);
    std::cout << b << std::endl;
    std::cout << a1 << std::endl;
    std::cout << a2 << std::endl;
    return 0;

}

正确输出: 1 0 1

#include <iostream>
#include <bitset>
using namespace std;
int main()
{
    std::bitset <1> a1;
    std::bitset <1> a2;

    a1 = std::bitset<1>(0);
    a2 = std::bitset<1>(1);

    std::bitset<1> b = (a1 ^= a2);
    std::cout << b << std::endl;
    std::cout << a1 << std::endl;
    std::cout << a2 << std::endl;
    return 0;

}

正确输出: 1 1 1 因为^=,所以你改变了a1。

XOR是运算符^

运营商^=是XOR,分配

答案 1 :(得分:1)

  std::bitset<1> b = (a1 ^= a2);

您正在修改a1

a1^=a2相当于a1=a1^a2。此外,它只会修改a1而非a2

使用此

  std::bitset<1> b = (a1 ^ a2); 

答案 2 :(得分:1)

in line:std :: bitset&lt; 1&gt; b =(a1 ^ = a2),您使用的是嵌套方程式。

如果你只是简单地得到rhs,你将会得到 - &gt; a1 = a1 ^ a2,所以你首先指定a1 = 0 xor 1,即1,然后你给b分配a1,这就是你得到a1 = 1的原因,以及b。

有关更多说明,您可以参考https://www.tutorialspoint.com/cplusplus/cpp_operators.htm(直接转到赋值运算符部分。)