c++ - 位域与位集

标签 c++ bit-fields bitset

我想将位存储在数组中(如结构)。所以我可以遵循以下两种方法中的任何一种

方法 1 (AN 1)

struct BIT
{
   int data : 1
};

int main()
{
   BIT a[100];
   return 0;
}

方法 2 (AN 2)

int main()
{
    std::bitset<100> BITS;
    return 0;
}

为什么有人更喜欢 AN 2 而不是 AN 1?

最佳答案

因为接近 nr。 2 实际上使用 100 位存储,加上一些非常小的(恒定)开销,而 nr. 1 通常每个 Bit 结构使用四个字节的存储空间。通常,根据 C++ 标准,struct 至少有一个字节大。

#include <bitset>
#include <iostream>

struct Bit { int data : 1; };

int main()
{
    Bit a[100];
    std::bitset<100> b;
    std::cout << sizeof(a) << "\n";
    std::cout << sizeof(b) << "\n";
}

打印

400
16

除此之外,bitset用许多有用的操作将你的位数组包装在一个很好的对象表示中。

关于c++ - 位域与位集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3998091/

相关文章:

c++ - 为什么变长数组不是 C++ 标准的一部分?

c - C位字段如何合并?

c++ - 位域变量语法

java - 在 Java 中实现 C 风格的位域

模板中的 C++ 模板

c++ - 通过右值引用而不是值获取接收器参数以强制接口(interface)的性能使用

c - 在 C 中,冒号在声明中意味着什么?

c++ - 无法足够快地写入位集

java - 如何获取 BitSet 表示的位数?

c++ - 使用虚函数访问私有(private)函数