c ++位集之间的异或
c++ XOR between bitsets
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,在异或运算后变为:
a1 = 1
为什么会这样?
如何在不创建 temp 变量的情况下避免这种情况?
#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.
异或运算符 ^
运算符 ^=
与赋值
异或
std::bitset<1> b = (a1 ^= a2);
您正在将此处的 a1
修改为
a1^=a2
等同于a1=a1^a2
。而且它只会修改a1
而不修改a2
。
使用这个
std::bitset<1> b = (a1 ^ a2);
行: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(直接去赋值运算符部分。)
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,在异或运算后变为:
a1 = 1
为什么会这样? 如何在不创建 temp 变量的情况下避免这种情况?
#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.
异或运算符 ^
运算符 ^=
与赋值
std::bitset<1> b = (a1 ^= a2);
您正在将此处的 a1
修改为
a1^=a2
等同于a1=a1^a2
。而且它只会修改a1
而不修改a2
。
使用这个
std::bitset<1> b = (a1 ^ a2);
行: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(直接去赋值运算符部分。)