编辑代码

#include <stdio.h>
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 100
int a[1+N/BITSPERWORD];

void set(int i){ 
    printf("set 中 i=%d\n",i);
    printf("set 中 a[i >> SHIFT]=a[%d]\n",i>>SHIFT);
     printf("set 中 i & MASK=%d\n",i & MASK);
     printf("set 中 1 << (i & MASK)=%d\n",1 << (i & MASK));
    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));}
int main () {
    int i;
    printf("清理数据:");
    for(i = 0; i < N;i++){
        clr(i);
        printf("%d,",a[i]);
    }
        
    while(scanf("%d",&i) != EOF){
       set(i);
    }
    for(i = 0; i < N;i++){
        printf("%d,",a[i]);
    }
       printf("处理后数据:\n");
    for(i = 0; i < N; i++){
        printf("i=%d,a[%d]=%d\n",i,i,a[i]);
        if(test(i))
            printf("i = %d,a[i]=%d,\n",i,a[i]);
    }
    return 0;
}