传统上,在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位数据)?
答案 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>
的特化,实际上空间可以根据需要优化位数组。