代码展示:
#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));
#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));}