问题标签 [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++ - 使用 std::bitset 计算有限集的子集
我想检查集合 [1, ..., 15] 的子集 S 有多少,因此不可能从 S 中选择两个元素,使得它们的和是 3 的倍数。
检查这一点的算法如下:在 [1, ..., 15] 的子集和长度为 15 的两个字符的字符串之间存在自然双射(假设两个字符是 '0' 和 '1'修正一个约定),其中位置 i 中的字符“0”表示整数 i 不在子集中,而位置 i 中的字符“1”表示整数 i 在子集中。例如,字符串“111001000000000”与子集 {1, 2, 3, 6} 相关联。该子集不满足上述约束。
我编写了一个 C++ 代码来生成所有此类字符串,将它们转换为 1 到 15 之间的整数向量,并检查该集合中的所有对是否存在总和为 3 的倍数的对。
这是代码:
问题是我的代码返回 373,这是错误的答案(正确的应该是 378)。我想我在这里做错了什么,但我在我的代码中找不到错误。
c++ - 如何在不使用 to_string 或逐个提取位的情况下提取大于 unsigned long long 的位集子集?
我想从给定的位集中提取一个子集,其中:
G(给定的位集大小)和S (子集大小)在编译时都是已知的
G
>
sizeof(unsigned long long) * 8
小号
<=
sizeof(int) * 8
子集可以从给定位集中的任何位置开始
结果子集应该是正确大小的位集,S
我可以使用按位数学隔离子集,但bitset.to_ullong
由于溢出错误而无法工作。
我知道我可以使用bitset.to_string
并进行字符串操作/转换。我目前正在做的是手动逐个提取位(这对我的用例来说已经足够了)。
我只是想知道是否还有其他方法可以做到这一点。
c++ - 关于比特流可能的未来 C++ 语言或标准库功能的一般问题
bitstream
在 C++ 20 之后的 C++ 未来版本中或在标准库中是否有提及具有特定对象?例如; 我们可以有一个std::bitset<n>
对象,其中n
是一个常数已知的整数值。
伪示例:
这里我们有一个类模板,它将指定对象中有多少位std::bitset
。这很好。
我们也有stream
诸如iostream
、fstream
、sstream
等对象,我们可以将各种数据类型的值输入这些流,读取或写入字符串流、文件流、控制台或终端的 I/O 流等。 ..
我想知道的是,是否有任何建议具有像上面那样的流对象,但特定于类似于性质的任意位序列std::bitset
,您可以将一组位输入到流中。例如,它可能看起来像这样:
这里的预期输出将是:
根据预期用途的字节序表示法...
逆转也适用。如果我们有一个已经填充的bitstream
对象,例如上面示例中的对象,我们可以从以下示例中提取特定的位序列bitstream
:
并且预期的结果将分别从 MSB 或 LSB 方向拉取bitset
对象大小的数量。
就像iostream
其他流库一样,通过使用该<iomanip>
库,我们可以拥有格式修饰符,可以将此输入或输出分解bit-segments
为任何指定长度的离散值,例如每 4 或 8 位,或将其显示为十六进制等......位操作和计算仍然是std::bitset
.
能够在与所有其他类似对象兼容的对象bitset
中推入或检索任意对象可能是一个非常强大且有用的工具或功能。bitstream
stream
有没有提到这样的东西,或者是否已经存在类似于这种性质的东西,而不必在字符串或其他类型之间来回转换等?
EDIT -User- walnut
在他的回答中给出了一些很好的例子,并且已经可以使用现有的iostream
对象和运算符来完成。您可以阅读他的回答和讨论中的评论,但是,我只是想说明我对一个stream
对象库的推理,该对象库被编写和设计为明确且专门用于bitset
数据类型。
想象一个这样的函数:
并比较一下...
调用者,用户将知道它正在返回一个bitstream
显式或专门与任意对象进行比较的stream
对象!这是我的主要意图或目标......它更倾向于可读性,并且在显示正确意图的代码中更具表现力。此外,它将与bitset
对象紧密耦合,这意味着bitstream
对象将只接受来自bitset
s 或其他bitstream
对象的数据,但它可以将其数据传递给bitset
s、bitstream
s 或其他stream
对象。
c++ - 使用 scanf/printf 从 bitset 输入/输出
我对 C++ 有点陌生,我想知道如何从 bitset 中 scanf 或 printf,即,对于 bitset 索引的 I/O 合适的类型说明符是什么?我想做的一个例子是:
c++ - 如何在 C++ 中的堆上使用 bitset?
如果我在堆栈上使用 bitset,我可以执行以下操作:
输出:
但是当我尝试在堆上分配位集时:
输出:
如果我尝试访问第二个位,我会得到一个空的 Bitset 而不是“1”。我究竟做错了什么?
c++ - Linux API 读/写和 c++ 位集
如何使用具有 Linux API 读/写功能的 C++ 位集容器?
像这样的东西:
我们可以不使用向量容器而立即编写位集吗?
c++ - 公开一个类内部的私有 std::bitset 字段以进行修改
我正在编写一个尚未超越 C++11 的 C++ 项目。
假设我有一个enum class
如下:
我想创建一个具有私有std::bitset
字段的类,该字段跟踪哪些工作日是特殊的。这个类也做了很多其他的事情,所以我不能或不应该std::bitset<7u>
直接使用。所以我定义:
我想使用这个类的方式如下
那么我必须在 (*) 处插入什么才能使用这样的类?特别是,我想将 (!) 分配给obj[kTuesday]
并获得这样的效果,即在内部obj
,该字段_specialflags[static_cast<size_t>(kTuesday)]
被相应地修改。所以像
inline bool operator[](Weekdays d) const { return _specialflags[static_cast<size_t>(d)]; }
还没剪;它公开各个位以供读取但不用于写入。
c++ - 如何有效地翻转 C++ 中的部分数字/位集?
考虑我有一个100101
长度为 6 的数字。我希望从位置 2 到 5 翻转位,所以我的答案是111011
. 我知道我可以在一个循环中翻转单个位。但是有没有一种有效的方法可以在没有 for 循环的情况下做到这一点?
c++ - C++ 入门第 5 版:表示整数序列的位集
我在 C++ Primer 5th edition 这个练习中被问到:
练习 17.10:使用序列 1, 2, 3, 5, 8, 13, 21,初始化在每个位置
bitset
都有一个1
位对应于该序列中的数字的 a。默认初始化另一个bitset
并编写一个小程序来打开每个适当的位。
事实上,我几乎解决了本书的所有练习,但我无法理解这一点。我明白了std::bitset
。
我找到了这样的解决方案:
但我不知道这是怎么回事以及它是如何工作的?如果正确,请帮助我理解这一点。太感谢各位了!
我不明白这样怎么能1000000010000100101110
代表序列1, 2, 3, 5, 8, 13, 21
?
c++ - C++ 中 std::bitset 的算术运算
我今天在这里向您请教一些关于我如何std::bitset
以正确的方式处理大事的明智提示。具体来说,我必须管理 256 位(甚至更多)的位集,并且在我需要执行经典的二进制操作之前,我不会遇到麻烦。当我需要在位集之间执行减法时,就会出现问题。通常,我会用to_ulong()
or翻译它们to_ullong()
,执行减法并重新翻译成 bitset,但n_bits > 64bit
事情并不像以前那么容易。
所以,我在这里问你是否有办法以另一种方式在 bitset 之间执行减法。我知道它也存在一个(或更多?)BigNum C++ 库,但我正在寻找可以在不添加外部库的情况下完成的事情。我认为使用 lib 是解决此问题的最后可能方法。
谢谢!