bitset 相关问题

C++中bitset的大小是多少

我想知道bitset实际上是如何分配内存的。我从一些博客中读到它以位为单位占用内存。但是,当我运行以下代码时: 位集<3>位= 001; 计算< 我想知道bitset实际上是如何分配内存的。我从一些博客中读到它以位为单位占用内存。但是,当我运行以下代码时: bitset<3> bits = 001; cout<<sizeof(bits); 我得到的输出为 4。它背后的解释是什么? 还有在 C++ 中以位为单位分配空间的方法吗? 您可以将 sizeof(bitset<N>) 近似为: 如果内部表示是 32 位(如 32 位系统上的无符号),则为 4 * ((N + 31) / 32) 如果内部表示是 64 位(如 64 位系统上的 unsigned long),则为 8 * ((N + 63) / 64) 看来第一个是真的:4 * ((3 + 31) / 32)是4 我得到的输出为 4。它背后的解释是什么? 标准中没有关于如何实现bitset的信息。它是实现定义的,请查看编译器的 <bitset> 标头。 还有在C++中以位为单位分配空间的方法吗? 不,C++ 中没有以位为单位分配空间的方法。 您的 CPU 不是使用单个位进行操作,而是使用字节和字进行操作。在您的情况下,sizeof(bits) 结果为 4,因为编译器决定将此数据结构与 4 字节对齐。 通常在 32 位处理器上,编译器会将分配的内存大小设置为 4 字节的倍数,因此大于 3/8 的最接近的 4 倍数是 4 字节。 您无法对单独的位进行寻址,最低可寻址单位是字节。所以不,你不能精确地分配位。 另一件事是填充 - 您几乎总是会获得您要求的更多字节分配,这是为了优化目的。寻址不在 32b 边界上的字节通常很昂贵,在 x64 CPU 上寻址不在 64b 边界上的字节会导致异常。 (说到英特尔平台。)

回答 5 投票 0

对两个 std::bitset 进行异或运算时会出现错误结果

#包括 #包括 int main() { std::bitset<8> a = 10101010; std::bitset<8> b = 11111111; std::cout << (a ^ b); } When running the

回答 1 投票 0

数独解算器不工作(回溯、前向检查、C++)

我正在研究优化的数独求解器。尽管我添加了前向检查,但回溯的基本思想仍然存在。为每个单元存储域(可以在单元中设置哪些数字)。 ...

回答 1 投票 0

无法循环移位

我正在尝试制作一个程序,将超出范围的位移回0。我遇到了这个问题: 它只是打印出相同的 3 组位并忽略发生的更改...

回答 1 投票 0

BitSet JAVA中如何左右移动位?

我有一个包含 100000 位的位集。我想尽可能有效地将其向右和向左移动。我猜 BitSet 类中没有用于移位的函数,所以我尝试转换...

回答 2 投票 0

如何在C中实现位集?

我一直在Java中使用Bitset类,我想在C中做类似的事情。我想我必须像C中的大多数东西一样手动完成它。什么是有效的实现方法? ...

回答 7 投票 0

我是否正确实现了动态位设置的增量运算符,因为它给出了意外的输出

我的 DynamicBitset 类有一个重载的增量运算符函数。 DynamicBitset DynamicBitset::operator++(int) { int 字节计数 = 0; 无符号整数计数 = 0; 无符号整数lastCharBitInd...

回答 1 投票 0

C++ 全局数组和非全局数组之间的区别(Stackoverflow 异常)[重复]

当我编写以下程序时,它可以正常工作,即位集数组是在 main() 方法之外声明的。 正确工作 #包括 #包括 使用名称...

回答 3 投票 0

std::bitset<N>::count 与 __builtin_popcount

比较以下两个表达式 std::bitset<8>(5).count() __builtin_popcount(5) 哪个更好?

回答 3 投票 0

如何在C++中将大位集即bitset<256>转换为十六进制?

我有一个很大的位集<256>,我想将其转换为十六进制,但 to_ulong() 和 to_ullong() 的常见解决方案会引发溢出错误。 位集<256> 位结果 = to_bitset(

回答 1 投票 0

使用 CPM 包管理器添加 boost/dynamic_bitset

我已经为此苦苦挣扎了一段时间。我使用 CPM 包管理器从 github 中为我的项目提取库。我更喜欢这种方式,而不是其他链接方法。我也尝试过 gh:boost...

回答 1 投票 0

错误:类型“std::bitset<16>”不提供调用运算符

我正在研究这个:来自 github 上 Andrei Tkachenko 的 WavReaderQt.cpp。 复制了我试图从原始代码中编辑的代码段。 我想打印它输出的文本文件中的位,但是......

回答 1 投票 0

Java BitSet 示例

我正在寻找一个很好的 Java BitSet 示例来处理 0 和 1。我尝试查看 Javadocs,但仅仅阅读它并不能理解该类的用法。例如,如何...

回答 7 投票 0

将 UInt64 数组转换为 BitVector

我最近发现我可以使用块获取 BitVector 的 UInt64 的“支持数组”。但是,我想采取相反的方式 - 给定一个 UInt64 的一维数组,构造一个

回答 1 投票 0

如何反转位集中的位?

例如,我有整数 a = 10; 它的二进制表示形式(对于 32 位整数)是 00000000000000000000000000001010 反过来,就变成了 01010000000000000000000000000000 ...

回答 6 投票 0

CUDA 中的 C++ 位集

我有一个广泛使用 bitset 模板的现有 C++ 代码。我正在将这段代码移植到 CUDA C,我对 CUDA 编程真的很陌生。我可以将 bitset 模板用作 __shared__ varia ...

回答 1 投票 0

在 C++ 中处理指向位集的指针

我的程序中有一堆 bitsets<32> 作为全局变量,我想在将指向其中一个的指针传递给函数后更新它们。 这是一个例子: #include

回答 2 投票 0

在 C 中实现 Type SB riscv 指令

我遇到了一些问题,我尝试将 32 位二进制文件解码为 RISCV 架构集中的 SB 型指令 我已经转移了操作码、imm、rs1、rs2 和 rd 值,但没有人...

回答 1 投票 0

Arduino 软件序列号错误值

在 Arduino leonardo 和 Arduino UNO 之间使用 SoftwareSerial 时,正在发送或接收错误的 1 字节值(我不知道)。 UNO 和 Leo 通过以下方式连接: 地线 引脚 9 和 8 这是鳕鱼...

回答 0 投票 0

Java Bitset.flip(from_index, to_index) 的时间复杂度

我有兴趣了解 BitSet.flip() 的时间复杂度。 我尝试了各种文档。我发现的最接近的东西是这个 Oracle 文档,它没有提到任何关于时间复杂性的事情......

回答 0 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.