I tried a lot but I am unable to understand bitwise seive…I know the basic seive.Pleae help me understand the bitwise seive and how it works?

The code with which I am busy with is—

#define MAX 100000000

#define LIM 10000

unsigned flag[MAX>>6]={0};

#define ifc(n) (flag[n>>6]&(1<<((n>>1)&31))) //LINE 1

#define isc(n) (flag[n>>6]|=(1<<((n>>1)&31))) //LINE 2

void sieve() {

unsigned i, j, k;

for(i=3; i<LIM; i+=2)

if(!ifc(i))

for(j=i*i, k=i<<1; j<LIM*LIM; j+=k)

isc(j);

}