《编程珠玑》笔记

#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1+ N/BITSPERWORD];

void set(int i)
{
    a[a>>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)) ;
}

 

int a[1+ N/BITSPERWORD]; 就是把n个数分成1+ N/BITSPERWORD个数组,数组每个元素可以表示32个数,分别对应每bit位为1.  这样就可以表示10 000 000个整数
比如说 整数为 1234,先找一下在第几组 1234/32= 39余16 ,那么就是在a[39]的第15位是1. 这个1就相当于在特别大的比特组中第1234位是1(也就是存在这个数).
根据这个返回再看算法是不是一目了然

posted on 2018-05-25 14:55  奔跑吧,蜗牛!  阅读(162)  评论(0编辑  收藏  举报

导航