当数字大于size_t类型的最大数目时,如何使用std :: bitset

时间:2019-04-03 11:33:18

标签: c++ std

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

std::bitset<2 ^ 160> _bitset;

我可以将设置用作

_bitset[10] = 1;

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

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

我得到了警告:

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

我知道由于(1 << 128)导致的错误,它太大了。

但是如何使用这样的数字?

2 个答案:

答案 0 :(得分:1)

  

但是如何使用这样的数字?

否,您不能使用与1 << 128一样大的数字作为std::bitset的索引。 std::bitset是一个以std::size_t作为参数的模板。尽管std::size_t的最大值是由实现定义的,但它比1 << 128小得多。

请注意,2 ^ 160是162,因为^xor运算。因此_bitset只有162位。

由于基于零的索引,您可以上升到索引161

1 << 128远远超出了这个范围。

答案 1 :(得分:1)

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

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

偶尔您确实需要一个具有2 ^ 160位的位集(理论上可以容纳2 ^(2 ^ 160)个不同的状态):这不适合您的计算机,甚至不适合可以适应地球大小的计算机。