问题标签 [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 回答
2308 浏览

c++ - 在位集中,我可以将“to_ulong”用于特定范围的位吗?

我正在做一些需要我访问特定位和位范围的事情。我决定使用 bitset,因为它很容易访问特定的位;如何提取位范围(子集)?

0 投票
12 回答
373345 浏览

c++ - 如何打印(使用 cout)二进制形式的数字?

我正在学习关于操作系统的大学课程,我们正在学习如何从二进制转换为十六进制,从十进制转换为十六进制等。今天我们刚刚学习了如何使用二进制补码将有符号/无符号数字存储在内存中(~number + 1)。

我们有几个练习要在纸上做,我希望能够在将作业提交给老师之前验证我的答案。我为前几个练习编写了一个 C++ 程序,但现在我不知道如何用以下问题验证我的答案:

我们需要在内存中显示ab的二进制表示c

我已经在纸上完成了它,它给了我以下结果(在二进制补码后的数字内存中的所有二进制表示):

a = 00111010(它是一个字符,所以 1 个字节)

b = 00001000(它是一个字符,所以 1 个字节)

c = 11111110 11000101(很短,所以2个字节)

有没有办法验证我的答案?C++ 中是否有标准方法来显示数字内存中的二进制表示,还是我必须自己编写每个步骤(计算二进制补码然后转换为二进制)?我知道后者不会花这么长时间,但我很好奇是否有标准的方法来做到这一点。

0 投票
1 回答
6522 浏览

c++ - 使用带有 std::bitset 的枚举类

首先,我想要一个普通的枚举而不是基于位的枚举,因为不同枚举的数量将超出任何整数类型。我还想利用 C++11 的类型安全性enum class。为此,自然的选择是std::bitset,但是我不知道如何将这两者绑定在一起。

需要定制bitset吗?如何绕过这样一个类的实现?

0 投票
2 回答
4935 浏览

c++ - 如何将 C++ 位集中的位范围子集转换为数字?

我有一个std::bitset并且 bitset 类型还提供了to_ulong一种将 bitset 转换为数字的方法,我的问题是关于将 bitset 转换为数字而只考虑该 bitset 中的范围,我需要实现我自己的 powerof2 函数或者有什么用更标准的方法?

0 投票
5 回答
186 浏览

c++ - 将字符简单地更改为其位表示

为什么我会收到错误消息?对我来说它看起来很简单。另外,这是做我想做的最好的方法吗?

0 投票
2 回答
11523 浏览

c++ - 如何将位集类型的所有位初始化为 1

我知道已经构造的 bitset 对象的 set() 函数,但我需要一个所有位均为 1 的构造 bitset。这种情况是默认函数参数。例如:

X 应该是什么,-1 可能适用于前 64 位,但不是全部。

0 投票
1 回答
399 浏览

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?)

0 投票
2 回答
7850 浏览

c++ - 如何将不同大小的位集传递给函数?

我想将位集传递给函数。如果位集的大小不同,我应该为函数原型中的位集参数size分配什么?bits

例如:

0 投票
3 回答
13334 浏览

c++ - 枚举是实现位标志的规范方法吗?

目前我在一个小游戏实验中使用枚举来表示一个状态。我这样声明它们:

这样我就可以这样使用它们:

但我想知道这是否是实现位标志的正确方法。位标志没有特殊的容器吗?我听说过std::bitset,我应该使用它吗?你知道更有效的方法吗?
我做对了吗?


我忘了指出我正在重载枚举的基本运算符:

|=我不得不为static_cast.

0 投票
2 回答
11914 浏览

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::bitsetsetflip

2)为什么调用reset对速度有巨大的负面影响std::bitset

这是我的代码:

我用它编译了

bitset.cpp上面插入的代码在哪里。