C++ 更改位集中的整数

C++ 更改位集中的整数,c++,std-bitset,C++,Std 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>

如何更改位集使用的整数?假设我使用
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&)'" 
位集mybits(32);
....
mybits(63);//此处给出编译错误,声明“调用(std::bitset)(uint&)不匹配”
我觉得应该有一些简单的方法来做到这一点,但还没有找到任何东西

只要打电话:
myBits=std::bitset{63}

您可以使用

mybits = bitset<32>(63);
后者之所以有效,是因为63可隐式转换为
位集
(因为
long
中的构造函数未标记为
explicit
)。它的功能与第一个版本相同,但不太详细。

副本可分配,因此您可以使用所需的值创建一个新副本,并将其分配给要更改的位集:

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

位集
满足和的要求

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

bitset<32> mybits(32);
// ....
mybits = bitset<32>(63);
并直接赋值:

mybitset = {42};
bitset<32> mybits(32);
// ....
mybits = bitset<32>(63);
bitset( unsigned long val ); // (until C++11)
constexpr bitset( unsigned long long val );
mybits = 63;