如何获取具有不同位集大小的位集 OR

Doo*_*nyx 5 c++ binary bit bitset

当我使用时,

  std::bitset<5> op1 (std::string("01001"));
  std::bitset<5> op2 (std::string("10011"));

  std::cout << (op1|=op2) << std::endl;  
Run Code Online (Sandbox Code Playgroud)

显然一切都很好。

但我的问题是,如何使用两个不同大小的“std::bitset”进行 OR 运算?例如,

  std::bitset<11> op1 (std::string("101110011"));
  std::bitset<5> op2 (std::string("01001"));

  std::cout << (op1|=op2) << std::endl;
Run Code Online (Sandbox Code Playgroud)

我无法在 VS 2012 中编译此代码。我在这里错过了什么?我不能使用不同大小的位集进行“或”运算(以及“异或”运算)吗?这是平台特定的问题吗?

jro*_*rok 5

该接口不直接支持这一点。您可以构造一个临时位集:

// assuming op1 is larger
op1 |= std::bitset<op1.size()>(op2.to_ullong())
Run Code Online (Sandbox Code Playgroud)

如果较大的位集的值不适合 a unsigned long long,您可以改为调用to_string