c++ - 当数量大于 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),它太大了。
但是我怎样才能使用这样的号码呢?
解决方案
如果您想要一个包含 160 位的位集(因此可以表示 2^160 个不同的状态),您应该使用std::bitset<160> _bitset;
.
要设置第 128 位,您只需执行_bitset[127] = 1
.
如果您确实想要一个具有 2^160 位的位集(理论上可以保持 2^(2^160) 个不同的状态):这不适合您的计算机,甚至不适合地球大小的计算机。
推荐阅读
- mongodb - mongodump 1 单个文档失败,因为 ObjectId
- r - 以长数据格式创建聚合变量
- tarsosdsp - 执行 FFT.forwardTransform() 时单击声音
- jquery - 吐司可见但不应该?
- javascript - 我如何才能简单地解决对象中对象中缺少的 JS 属性?
- php - PHP-LARAVEL 6 创建的类别返回 404
- google-apps-script - 如何使用谷歌分析跟踪谷歌表格中的行值发送的电子邮件?
- python - 子列表的唯一元素取决于子列表中的特定值
- environment-variables - Bazel - 如何从环境文件中读取字符串?
- javascript - Service Worker 未收到推送消息