更改位集中的整数

时间:2015-08-25 17:17:44

标签: c++ std-bitset

如何更改bitset使用的整数?假设我使用bitset来声明一个变量mybitset,它存储一个数字的位,比如说32个。做了一些操作之后,我希望mybitset存储一些其他数字的位,比如说63.我如何实现这一目标?

我在下面添加了一小段示例代码以帮助解释。

bitset<32> mybits(32);
....
mybits(63);  // gives compilation error here, stating "no match for call to '(std::bitset<32u>) (uint&)'" 

我觉得应该有一些简单的方法来做到这一点,但却找不到任何东西。

4 个答案:

答案 0 :(得分:3)

您可以使用

mybits = bitset<32>(63);

正如其他答案所指出的那样,或者只是

mybits = 63;

后者有效,因为63可隐式转换为bitset<32>(因为long中的构造函数未标记为explicit)。它与第一个版本的功能相同,但不那么冗长。

答案 1 :(得分:2)

来自reference documentation

  

bitset符合CopyConstructibleCopyAssignable的要求。

因此,您可以简单地从另一个std::bitset分配相同的模板参数签名:

bitset<32> mybits(32);
// ....
mybits = bitset<32>(63);

或使用其中一个隐式构造函数(2)和左值类型推导:

bitset( unsigned long val ); // (until C++11)
constexpr bitset( unsigned long long val );

并直接指定值:

mybits = 63;

答案 2 :(得分:1)

致电: myBits = std::bitset<32>{63};

答案 3 :(得分:1)

std::bitset是可复制的,因此您创建一个具有所需值的新值,并将其分配给您想要更改的位集:

bitset<32> mybitset{21};
mybitset = bitset<32>{42};

如果您不想再次指定类型,则可以使用decltype,甚至更好地使用bitsets构造函数不明确的事实:

mybitset = {42};

(在action)