bit数组


代码展示: 

#define MAXSIZE 100000
#define BASE    32     // win32 下int是32 bit 
#define SHITF   5      //  2^5 = 32
#define MASK    0X1F   //  取末5位

int a[MAXSIZE/BASE + 1];  //  +1是为保险起见。若数组下标从0开始,可以不+1


//  i >> SHIFT     :找到对应数组元素下标
//  1 << (i & MASK):找到int中的对应位
//
void set(int i)
{
    a[i >> SHIFT] |= 1 << (i & MASK); 
}

void clr(int i)

    a[i >> SHIFT] & = ~(1 << (i & MASK));
}

int test(int i)

    return a[i >> SHIFT] & (1 << (i & MASK));

} 

内容摘自以下链接: 

    http://bbs.csdn.net/topics/70223375

    修正了原内容的一个小错误,红色字体应该被删除:

    void clr(int i)
    { a[i >> SHIFT] &| = ~(1 << (i & MASK));}
原文地址:https://www.cnblogs.com/ant-wjf/p/3251758.html