-3
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

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

4

3 回答 3

3
#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 赋值

于 2017-07-06T12:27:31.420 回答
1

在行中: std::bitset<1> b = (a1 ^= a2) ,您正在使用嵌套方程。

如果你将简单化你将得到的 rhs -> a1 = a1^a2,所以你首先分配 a1 = 0 xor 1 即 1 然后你用 a1 分配 b 这就是为什么你也得到 a1 = 1 和 b .

更多解释可以参考https://www.tutorialspoint.com/cplusplus/cpp_operators.htm(直接到赋值运算符部分。)

于 2017-07-06T15:43:24.480 回答
1
  std::bitset<1> b = (a1 ^= a2);

你在a1这里修改为

a1^=a2相当于a1=a1^a2.Also 它只会修改a1而不是a2.

用这个

  std::bitset<1> b = (a1 ^ a2); 
于 2017-07-06T12:29:07.737 回答