1.如何使用位逻辑来实现位向量
#define BITSPERWORD 32 //int型为32位
#define SHIFT 5
#define MASK 0x1F //模数
#define N 10000000 //假定大小
int a[1 + N/BITSPERWORD];
void set(int i)
{
a[i>>SHIFT] |= (1<<(i & MASK));
/* i >> shift 表示i对2的shift次方取整.
作用:计算当前的整数i所代表的位,应该在数组的第几个元素内
i & mask 表示i对mask+1取余.
作用:计算在当前的4个字节(32位)中,哪一位应该被置1.
1 << (i & mask) 表示将1左移 i & mask 位.
作用为:将 i & mask 位置为1,根据上面的假设,此处第十位被置为1,而其他位都为0。
因为用的int型数组来充当位向量,故而需要计算给定的i在数组a的哪个索引内,对于a[index]中元素中值,将值与待置1的位进行与运算,从而置1
*/
}
void clr(int i)
{
a[i>>SHIFT] &= ~(1<<(i & MASK));
//如上,此时进行&=~运算后。将需要置0的位置置0同时其他位置不变
}
int test(int i)
{
return a[i>>SHIFT] & (1<<(i & M