问题标签 [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.
c++ - 在位集中,我可以将“to_ulong”用于特定范围的位吗?
我正在做一些需要我访问特定位和位范围的事情。我决定使用 bitset,因为它很容易访问特定的位;如何提取位范围(子集)?
c++ - 如何打印(使用 cout)二进制形式的数字?
我正在学习关于操作系统的大学课程,我们正在学习如何从二进制转换为十六进制,从十进制转换为十六进制等。今天我们刚刚学习了如何使用二进制补码将有符号/无符号数字存储在内存中(~number + 1)。
我们有几个练习要在纸上做,我希望能够在将作业提交给老师之前验证我的答案。我为前几个练习编写了一个 C++ 程序,但现在我不知道如何用以下问题验证我的答案:
我们需要在内存中显示a
和b
的二进制表示c
。
我已经在纸上完成了它,它给了我以下结果(在二进制补码后的数字内存中的所有二进制表示):
a = 00111010(它是一个字符,所以 1 个字节)
b = 00001000(它是一个字符,所以 1 个字节)
c = 11111110 11000101(很短,所以2个字节)
有没有办法验证我的答案?C++ 中是否有标准方法来显示数字内存中的二进制表示,还是我必须自己编写每个步骤(计算二进制补码然后转换为二进制)?我知道后者不会花这么长时间,但我很好奇是否有标准的方法来做到这一点。
c++ - 使用带有 std::bitset 的枚举类
首先,我想要一个普通的枚举而不是基于位的枚举,因为不同枚举的数量将超出任何整数类型。我还想利用 C++11 的类型安全性enum class
。为此,自然的选择是std::bitset
,但是我不知道如何将这两者绑定在一起。
需要定制bitset
吗?如何绕过这样一个类的实现?
c++ - 如何将 C++ 位集中的位范围子集转换为数字?
我有一个std::bitset
并且 bitset 类型还提供了to_ulong
一种将 bitset 转换为数字的方法,我的问题是关于将 bitset 转换为数字而只考虑该 bitset 中的范围,我需要实现我自己的 powerof2 函数或者有什么用更标准的方法?
c++ - 将字符简单地更改为其位表示
为什么我会收到错误消息?对我来说它看起来很简单。另外,这是做我想做的最好的方法吗?
c++ - 如何将位集类型的所有位初始化为 1
我知道已经构造的 bitset 对象的 set() 函数,但我需要一个所有位均为 1 的构造 bitset。这种情况是默认函数参数。例如:
X 应该是什么,-1 可能适用于前 64 位,但不是全部。
c++ - C++ std::map std::bitset 段错误
我有这个代码:
这旨在在访问页面的该字节时用 1 标记一个 4096 位长的位集。
当我使用大约 1GB 的 XML 进行测试时,这段代码在我的测试机器上运行良好。但是当我在完整的东西(220GB 的 XML)上运行它时,它会出现以下分段错误:
但是它在运行的早期就这样做了,所以很难认为这是数据大小的产物。无论如何,我在使用一些非常相似的代码分析这个更大的数据集时没有问题(在https://github.com/mcmenaminadrian上查看我的 github 存储库- 这个项目是 memsize,但 pagestat 使用非常相似的代码)。此代码的唯一区别因素似乎是位集的使用。
有人能发现到目前为止我一直没有发现的错误吗?
(代码是多线程的 - bitset 线程安全吗?这可能是库问题 - 我的测试系统是 Mac OSX,但“生产”系统是 Linux - Ubuntu 12.04 LTS?)
c++ - 如何将不同大小的位集传递给函数?
我想将位集传递给函数。如果位集的大小不同,我应该为函数原型中的位集参数size
分配什么?bits
例如:
c++ - 枚举是实现位标志的规范方法吗?
目前我在一个小游戏实验中使用枚举来表示一个状态。我这样声明它们:
这样我就可以这样使用它们:
但我想知道这是否是实现位标志的正确方法。位标志没有特殊的容器吗?我听说过std::bitset
,我应该使用它吗?你知道更有效的方法吗?
我做对了吗?
我忘了指出我正在重载枚举的基本运算符:
|=
我不得不为static_cast
.
c++ - boost::dynamic_bitset 比 std::bitset 慢,除非 std::bitset 被重置
我最近遇到了 bitset 模板,我真的很想在我当前的项目中使用它们。继续阅读,我看到std::bitset
模板的大小必须在编译时确定。许多人建议使用boost::dynamic_bitset
来减轻此要求。
为了比较两者,我决定对 、 和 方法进行set
速度flip
比较count
。
结果很奇怪......我想知道是否有人可以为我解释一下。
代码在帖子的末尾,但我会在这里解释我在做什么。我有一个std::bitset
对象(调用它bs
)和一个boost::dynamic_bitset
对象(调用它dynbs
)。每个都有n=1000000
位。对于上面的给定方法,n
依次调用每个位上的方法并重复此R=10000
时间。
使用该std::chrono
库,以下是每个以纳秒为单位的时间:
和boost::dynamic_bitset
似乎要慢set
得多flip
。
更有趣的是,如果reset
在运行这些测试之前对两个对象调用该方法,那么时间是可比较的。他们来了:
现在,两个容器都声称将所有位初始化为0
,因此调用reset
不应更改任何位。转储none
之前和之后的输出reset
确实证实了这一点。
所以毕竟,我有两个问题:
1)为什么比调用时和时boost::dynamic_bitset
慢得多?std::bitset
set
flip
2)为什么调用reset
对速度有巨大的负面影响std::bitset
?
这是我的代码:
我用它编译了
bitset.cpp
上面插入的代码在哪里。