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

void set(int i) {      a[i>>SHIFT] |= (1<<(i & MASK)); }
void clr(int i) {      a[i>>SHIFT] &= ~(1<<(i & MASK)); }
void test(int i) { return a[i>>SHIFT] & (1<<(i & MASK)); }

보셨던 분은 대강의 내용을 아실거라 믿고 답변 부탁 드릴께요 ㅠ.ㅠ

q1) a[i>>SHIFT] <==  a배열의 인덱스 부분을 SHIFT 하는 이유가 무엇 인가요? 왜 건드는지 모르겠음...
      (인덱스라고 생각하는 고정관념의 문제인가...)
q2) 1을 << 하는데  [ (i & MASK) 부분이   {상수} & {00011111} 이니까 결과가 000xxxxx 형태로 나올텐데..
      이것을 또왜 |= <--- 이걸 하는지.....  (많이 어려움 ㅠ.ㅠ)         그런데 << 연산은 뒤에 쓰인 정수만큼
       움직이지 않음?????

아 궁금해요 ㅠ.ㅠ