如何制作'bit'数组而不是'int'数组?

时间:2016-01-09 14:06:34

标签: c++ arrays int bit

传统上,在C ++中,在创建数组时,我将其声明为int。 但是,由于我只处理二进制数(仅限1和0),我认为可以将4字节'int'转换为1位。

例如

int array1[] = {1,0,0,0,0,1,0}; // -----had total of 32 bytes

由于它只是二进制文件,因此每个int 1将存储为000000000000000000000000000001(4个字节),因此内存效率仅为1/32。

所以我的问题是如何将所有这些转换为比特,以便32字节可以'压缩'为1字节(而不是8字节的32字节,我想要8位数据)?

2 个答案:

答案 0 :(得分:7)

使用std::bitset。我想这就是你想要的。

我不知道你是否是一名有竞争力的程序员,但有时候在竞争性编程中,它需要有10 ^ 9个标志。然后bitset或筛选的主要决定这非常有用。

#include<bitset>
...
...
bitset<10000000> bs;

..
bs[1]=1;
bs[i]=0;
..etc

答案 1 :(得分:4)

  

传统上,在C ++中,在创建数组时,我将其声明为int。

没有这样的共同惯例。

  

但是,由于我只处理二进制数(仅限1和0),我认为可以将4字节'int'转换为1位。

当然人们可能会认为这会导致声明类似

的内容
bool array1[]{true,false,false,false,false,true,false};

虽然上面的实现只是将用于单个位的空间减少到unsigned char,这是可以在c ++中寻址的最小内存单元。

幸运的是,c ++提供了std::vector<bool>的特化,实际上空间可以根据需要优化位数组。