我声明了一个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( 个不同的状态(:这不适合你的电脑,它甚至不适合地球大小的计算机。