更改位集中的整数
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)
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;
如何更改 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)
bitset
meets the requirements ofCopyConstructible
andCopyAssignable
.
因此您可以简单地从另一个匹配相同模板参数签名的 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;