当我们要存储一个状态数组如bool数组的时候,每一个bool占用的空间是一个字节,如果要存储数组的规模是10000的话,总共占用的存储空间是4*10000 = 40000bytes
但是如果将状态转化为一个bit,用0/1来表示false/true的话,一个字节上就可以存储8个状态,所以上面的存储规模可以优化为 4*10000/8 = 5000bytes,缩小了8倍。
所以采用位操作可以高效的组织数据。
下面的例子将演示如何使用模拟bit数组进行位操作
int cellSize = sizeof(long);
long mem[1+MAXSIZE/cell_size];//MAXSIZE为所要存储的状态的size
void set(int index)//置1
{
a[index / cellSize] |= 1 << (index % cellSize);
}
void reset(int index)//置0
{
a[index/cellSize] &= ~(1 << (index % cellSize)