问题标签 [std-bitset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
779 浏览

c++ - 传递 const 变量时编译器返回错误:模板参数不是常量表达式

所以我写了这段代码->

bitset 容器不接受 const 整数大小作为参数并抛出错误 - Non-type template argument is not a constant expression。我想知道为什么会发生这种情况,因为 size 已被声明为常量,并且它的值在我的程序运行时不会改变?

0 投票
3 回答
315 浏览

c++ - Bitset 上的按位或给出错误答案

答案应该是 1000 但它显示 00000

0 投票
2 回答
1326 浏览

c++ - C++中使用Bitset将16位显示成四组4位

我正在处理编程任务,我正在使用 C++ 中的 bitset<> 函数将整数的二进制表示形式打印为 16 位。我很难将 16 位打印成四组,每组四位,中间有一个空格。如何使用 bitset 函数做到这一点?

如果整数为 1,则打印出来

我要打印的是

0 投票
2 回答
947 浏览

c++ - 位集,布尔向量或整数向量,用于简单的大整数

我有一个算法,我目前使用两个无符号整数作为位图来存储有关输入的信息;这将最大输入大小限制为 64,因此我想创建一个版本,其中整数被位集或简单的大整数替换。我开始使用vector<bool> 写一些东西,但是环顾四周,我看到很多答案告诉我要避免使用vector<bool>。

我需要的操作:

  • 初始化为全零。
  • 左移(乘以 2)并设置新的 lsb。
  • 添加并设置 msb。
  • 比较两组以首先找到最小/字典顺序。

创建它们时,我知道最大位数,但起初我只需要 1 位;然后,在每一步,一组左移,而另一组将添加一个新的最高位:

如果我创建大小为 1 的位集,然后逐渐扩展它们,也许比较会比我立即将长度设置为最大值并可能有数千个前导零更快?

那么我应该继续使用 vector<bool> 还是使用 std::bitset (不幸的是它是固定大小的)或者编写一个简单的 biginteger 实现,该实现能够使用无符号整数向量完成上述操作?


使用 vector<bool> 您可以初始化长度为零的向量:

然后像这样执行上面提到的操作:

0 投票
1 回答
578 浏览

c++ - 如何将位集分配给无符号字符向量?

我正在使用具有一些十六进制值的无符号字符向量。

然后,使用位集,我将同步 [3]“变形”为 8 位表示。这是因为我需要破坏/切换其中的任何随机位。

因为,我通过引用传递我的向量,所以我想对其进行更改。即我对我的位集所做的任何更改,我也想将它提交给向量。但是,我不确定如何将 bitset 转换为 unsigned char 以及如何将其分配给我的向量,以更新我的向量同步

0 投票
1 回答
312 浏览

c++ - C++一次访问bitset<8>两个位

我有一个 bitset<8> 的向量,如下所示:

01010110 01010111 01011000ETC..

如何一次访问两个位?如何在变量中存储两位?

对于我想要的向量的第一个元素01,然后01,然后01,然后10等等..

0 投票
3 回答
370 浏览

c++ - 为什么 std::bitset 只支持整数数据类型?为什么不支持浮动?

在尝试生成浮点数的位模式时,如下所示:

编译器生成此警告:

忽略警告时的输出:):

为什么 bitset 不能检测浮点数并正确输出位序列,当转换为 char* 并且步行内存确实显示正确的序列时?这可行,但机器依赖于字节顺序并且大多不可读:

输出:

有理由不支持浮动吗?花车有替代品吗?

0 投票
1 回答
567 浏览

c++ - 重载 std::bitset 的移位运算符

我想使用移位运算符来进行位旋转,而不是它们的实际位移。这是我的预期行为:

所以我尝试重载<<=运算符,引用bitset定义,如下所示:

我在关键字处遇到错误operator

'operator<<' 的离线定义与 'bitset<_Size>' 中的任何声明都不匹配

我该如何解决?我的环境。是:

  • Xcode:版本 9.1 (9B55)
  • LLVM( llvm-g++ -v) :Apple LLVM 版本 9.0.0 (clang-900.0.38)
0 投票
2 回答
258 浏览

c++ - 来自 std::bitset::operator[] 的模板推导

这段代码怎么编译不出来?为什么bs[1]不能推断bool

有没有解决这个问题的通用方法?

编译器错误:

0 投票
2 回答
457 浏览

c++ - 为什么 MSVC 在 std::bitset::count 的实现中不使用 __popcnt?

我很想知道 MSVC 是否使用编译器内在 __popcnt 来处理bitset::count.

环顾四周,我发现这是std::bitset::countVS2017 的实现:

看起来它使用查找表来获取任何给定字节的位数,然后计算每个字节的 1 的数量。

根据这个答案here,GCC这样实现它(按照我的想法):

虽然我没有对任何东西进行基准测试,但我敢打赌 GCC 的实现在这里会快很多。

因此,有什么令人信服的理由让 MSVCstd::bitset::count像这样实施吗?我的猜测是 MSVC 有一个包罗万象的“STL 中没有编译器内在函数”策略,或者我忽略的两个平台之间存在差异。