更改位集中的整数

Change integer in 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&)'" 

我觉得应该有一些简单的方法可以做到这一点,但还没有找到任何东西。

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

您可以使用

mybits = bitset<32>(63);

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

mybits = 63;

后者之所以有效,是因为 63 可以隐式转换为 bitset<32>(因为来自 long 的构造函数未标记为 explicit)。它与第一个版本做同样的事情,但不那么冗长。

A std::bitset 是可复制赋值的,因此您可以使用所需的值创建一个新的并将其赋值给您想要更改的位集:

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

如果你不想再次指定类型,你可以使用 decltype 甚至更好的事实是 bitsets 构造函数不是显式的:

mybitset = {42};

(在action)

reference documentation

bitset meets the requirements of CopyConstructible and CopyAssignable.

因此您可以简单地从另一个匹配相同模板参数签名的 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;