如何更改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&)'"
我觉得应该有一些简单的方法来做到这一点,但却找不到任何东西。
答案 0 :(得分:3)
您可以使用
mybits = bitset<32>(63);
正如其他答案所指出的那样,或者只是
mybits = 63;
后者有效,因为63可隐式转换为bitset<32>
(因为long
中的构造函数未标记为explicit
)。它与第一个版本的功能相同,但不那么冗长。
答案 1 :(得分: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;
答案 2 :(得分:1)
致电:
myBits = std::bitset<32>{63};
答案 3 :(得分:1)
std::bitset
是可复制的,因此您创建一个具有所需值的新值,并将其分配给您想要更改的位集:
bitset<32> mybitset{21};
mybitset = bitset<32>{42};
如果您不想再次指定类型,则可以使用decltype
,甚至更好地使用bitsets构造函数不明确的事实:
mybitset = {42};
(在action)