如何在数字大于类型 size_t 的最大数量时使用 std::bitset

How can I use std::bitset while the number is larger than the max number of type size_t

本文关键字:最大数 bitset std 数字 大于 类型 size      更新时间:2023-10-16

我声明了一个std::set,如下所示:

std::bitset<2 ^ 160> _bitset;

我可以将集合用作

_bitset[10] = 1;

但是如果我想将索引 (1 <<128( 设置为 1

_bitset[(1 << 128)] = 1;

我收到了警告:

警告:左移计数>= 类型 [-Wshift 计数-溢出] 的宽度_bitset[(1 <<128(] = 1;

我知道错误是因为(1<<128(,它太大了。

但是我怎么能像这样使用这个数字呢?

但是我怎么能像这样使用这个数字呢?

不可以,您不能使用与1 << 128一样大的数字作为std::bitset的索引。 std::bitset 是以 std::size_t 作为参数的模板。虽然std::size_t的最大值是实现定义的,但它远小于1 << 128

请注意,2 ^ 160是 162,因为^xor操作。所以_bitset只有 162 位。

由于从零开始的索引,您可以升级到索引161

1 << 128远不止于此。

如果你想要一个容纳 160 位的位集(因此可以表示 2^160 个不同的状态(,你应该使用 std::bitset<160> _bitset; .

要设置第 128 位,您只需执行_bitset[127] = 1 .

如果你确实想要一个具有 2^160 位的位集(理论上可以容纳 2^(2^160( 个不同的状态(:这不适合你的电脑,它甚至不适合地球大小的计算机。