1.位向量的含义
位向量指的是由一些二进制位组成的向量,包含位向量的设置,清零以及探测功能,例如:如果有1,2,4,5这几个数组,则需要二进制数110110表示。现在需要用32位的int型数据的每一位表示一个数据,因为正常情况下数据范围大于32,所以需要int数组来表示,即a[0]表示0-31,a[1]表示32-63,以此类推。
2.代码实现
#define N 10000000 //表示数据的最大值
#define BITPERWORD 32 //表示int所占的字节数
#define SHIFT 5 //表示2^5=32位的int
#define MASK 0x1f //5位的掩码,表示二进制数11111
int array[1 + N / BITPERWORD]; //存储最大值为N所需要位向量的数组,初始值均为0
//设置位向量
void set(int i)
{
array[i >> SHIFT] |= (1 << (i&MASK)); //i >> SHIFT表示它存放在数组的哪一个元素下面,i&MASK表示i%32
}
//清楚数组第i位为0
void clear(int i)
{
array[i >> SHIFT] &= ~(1 << (i&MASK));
}
//返回array的第i位
int test(int i)
{
return array[i >> SHIFT] & (1 << (i & MASK));
}