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));}

 

posted on 2013-08-11 18:41  Waaaaaall-E  阅读(302)  评论(0编辑  收藏  举报

导航