问题标签 [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++ - 位集参考
来自http://www.cplusplus.com/reference/stl/bitset/:
因为在大多数 C++ 环境中不存在这种小的元素类型,所以单个元素作为模仿元素的特殊引用进行访问
bool
。
这个位参考究竟是如何工作的?
我能想到的唯一方法是使用char
s 的静态数组,但是每个实例都需要将其索引存储在数组中。由于每个引用实例至少具有 a 的大小size_t
,这将破坏位集的紧凑性。此外,调整大小可能会很慢,而位操作预计会很快。
c++ - 将位集保存到结构字段中
我决定不使用 MACROS 进行按位运算,而是使用 BitSet。基本上我打算做的是,我收到一个结构评估它的位,然后将它们附加到另一个结构。
我收到一个结构,说:
我需要获取状态并检查每个接收到的位,所以我创建了一个接收到的结构的位集:
现在,在评估之后,我需要将接收到的位附加到另一个结构中,比如:
所以,我要做的是:
我想将位分配给结构字段,我收到此错误:无法在分配中将 'std::bitset<16u>' 转换为 'uint16'
我不想更改结构字段类型,我该怎么办?我为我的问题多么愚蠢而道歉。
提前致谢
c++ - 是否使用 std::vectorC++ 中的对象可以接受,还是我应该使用替代方法?
我正在使用用户定义的位数(我持有一个三维位数组,因此大小按立方增加 - 假设不少于 512 位),并且需要分别翻转它们。现在,只是在计算机上,我正在使用该bool
类型,因为内存不是问题。我确实计划将来将代码移至微控制器,因此处理能力和内存要求可能是一个问题。不过现在,我只想要速度。
然后我从C++ STL中找到了该std::bitset
对象,但我无法在运行时定义位集的大小。然后我发现有一个特殊的初始化程序将它们存储为位(而不是整个字节或 4 个字节),但后来在 Wikipedia 中找到了这一部分:std::vector<byte>
标准库
vector
为bool
. 这种特殊化的描述表明实现应该打包元素,以便每个元素bool
只使用 一位内存。这被广泛认为是一个错误。[...] C++ 标准委员会和库工作组之间普遍达成共识,vector<bool>
应该弃用并随后从标准库中删除,而功能将以不同的名称重新引入。
现在,您可能会看到我想要使用一个vector<bool>
对象,但是在阅读之后,我正在考虑使用其他东西。唯一的问题是我不确定要使用什么。我很好奇为什么他们说应该重新引入该功能(尽管名称不同)。
所以,我的问题是,vector<bool>
对象的使用是否可以接受(因为它们是 STL 的一部分)?它们是 C++ 标准的一部分吗?
如果它们的使用不可接受,是否有可接受的替代解决方案(在我之外自己定义一个特殊容器)?我自己有一些想法,但我只是好奇是否有人有更好的解决方案。此外,我想避免使用大型库(同样,我想最终将此代码移植到微控制器)。
c++ - C++ 新手关于使用字符串的 Bitset 操作
我目前正在学习 bitset,在一段中它谈到了它们与字符串的交互:
“字符串和位集的编号约定是反向相关的:字符串中最右边的字符 - 具有最高下标的字符 - 用于初始化位集中的低位 - 下标为 0 的位。”
但是后来他们给出了一个示例+图表,显示如下:
的值str
:
1 1 1 1 1 (1 1 0 0) 0 0 0 ...
的值bitvec5
:
...0 0 0 0 0 0 0 (1 1 0 0)
此示例显示它获取最右边的位并将其放置,因此字符串中的最后一个元素是位集中的最后一个元素,而不是第一个。
哪个是对的?(或者都是错的?)
c++ - 如何克服 Bitset 错误
如果我写,
它给了我一个错误说
错误 C2975:“_Bits”:“std::bitset”的模板参数无效,预期的编译时常量表达式
如何克服这个错误,我想在运行时初始化 bitset,可以吗?还是有其他方法可以做到这一点?
c++ - 使用 VS2010 在 C++ 中的位集
我无法弄清楚我是否在这里做错了什么,希望这里有人可以启发我。
我有一个类Flags
,这是一个非常简化的版本,但我声明了一个 bitset
在我的构造函数中,我将其初始化为
但它不会编译并给我错误
错误 C2668:“std::bitset<_Bits>::bitset”:对重载函数的模糊调用
这是在 VS2010 SP1 64 位中编译的,但作为 32 位程序
编辑
接受的答案是针对上述内容,但作为旁注,任何人都可以解释为什么在使用默认构造函数(应该将它们全部初始化为零)时,它们没有全部设置为零?
返回 1390560944 和 _p 看起来像
c++ - 使用 VS2010(另一个)在 C++ 中的位集
我刚刚问了另一个关于位集的问题,结果证明这是 使用 VS2010 的 C++中 VS2010 位集的一个错误
但是,在更改用于位集的构造函数后,我遇到了另一个问题(如另一个问题的编辑中所述)
当使用 bitset 的默认构造函数时,它不会被初始化为 0,而是被设置为
并_p.to_ulong()
返回1390560944
这是代码
我也只是尝试使用: _p(32)
,但这导致设置与上面相同的位,但是返回的值to_ulong()
是1437615792
这是怎么回事?
编辑:这是在 VS2010 SP1 64 位中编译的,作为 32 位程序
编辑2:
在下面的评论中,我说我可以在一个简单的程序中复制它——我可以复制两次,但从那以后每次都很好——也许我只是慢了,度过了漫长的一天。
在我的另一个项目(这是我正在尝试的模拟器)中,我将其范围缩小到一些函数指针数组。如果我取出它们被赋值的位置,那么我不会得到任何躲闪的行为,这些数组可以在这里看到
该代码将无法编译,因为内存寻址函数将不存在并且包括那些我必须包括一堆其他类等等等。但是为什么将值分配给函数指针数组会影响位集的值?bitset 将在init()
被调用之前被初始化
c++ - bitset::operator[] == false/true 还是 bitset::test?
使用 bitset::operator[] 是否等同于使用 bitset::test 或者是否有一些底层优化?
也就是说,这两个循环是否等效?
使用 bitset::operator[]:
使用 bitset::test():
java - 压缩排序集执行
我需要以节省空间的方式在实现中存储大量Long
值。SortedSet
我正在考虑位集实现并发现了Javaewah。但是,API 需要int
值而不是long
s。
任何人都可以推荐任何替代方案或提出解决此问题的好方法吗?我主要关心空间效率。在构建集合时,我需要访问一次最小和最大元素。然而,访问时间并不是一个大问题(即完全运行长度编码的实现就可以了)。
编辑
我应该清楚,如果我可以访问集合的最小和最大元素,则实现不必实现接口。SortedSet