4

如何更改正在使用的整数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

4 回答 4

4

您可以使用

mybits = bitset<32>(63);

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

mybits = 63;

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

于 2015-08-25T17:23:21.610 回答
2

参考文档

bitset满足 和 的CopyConstructible要求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;
于 2015-08-25T17:27:57.107 回答
1

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

于 2015-08-25T17:23:13.540 回答
1

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

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

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

mybitset = {42};

(在行动中)

于 2015-08-25T17:25:59.643 回答