我声明了一个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)导致的错误,它太大了。
但是如何使用这样的数字?
答案 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)个不同的状态):这不适合您的计算机,甚至不适合可以适应地球大小的计算机。