位图运算

来源:互联网 发布:wpf编程 编辑:程序博客网 时间:2024/05/01 16:22
#include <stdio.h> #define BITSPERWORD 32 #define SHIFT 5 #define MASK 0x1F #define N 10000000 int a[1 + N/BITSPERWORD]; /***i / 32 对应具体数组元素i % 32 对应具体数组元素的bit位i >> SHIFT == i / 32i & MASK == i % 32****/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)); } int main(){ int i; for (i = 0; i < N; i++) clr(i);while (scanf("%d", &i) != EOF) set(i); for (i = 0; i < N; i++) if (test(i)) printf("%d\n", i); return 0; }