首页 > 解决方案 > 当数量大于 size_t 类型的最大数量时,如何使用 std::bitset

问题描述

我声明了一个 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),它太大了。

但是我怎样才能使用这样的号码呢?

标签: c++std

解决方案


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

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

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


推荐阅读