bit_map
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #define BITSPERWORD 32 #define SHIFT 5 #define MASK 0x1F #define N 1024 int a[1 + N/BITSPERWORD];//申请内存的大小 //set 设置所在的bit位为1 void set(int i) { a[i>>SHIFT] |= (1<<(i & MASK)); } //clr 初始化所有的bit位为0 void clr(int i) { a[i>>SHIFT] &= ~(1<<(i & MASK)); } //test 测试所在的bit为是否为1 int test(int i){ return a[i>>SHIFT] & (1<<(i & MASK)); } int _tmain(int argc, _TCHAR* argv[]) { int i; for (i = 0; i < N; i++) { clr(i); } while (scanf("%d", &i) != EOF) //输入“Ctrl+Z” { set(i); } printf("\n<<< Start >>>\n"); for (i = 0; i < N; i++) { if (test(i)) { printf("%d ", i); } } printf("\n<<< End >>>\n"); system("pause"); return 0; }
显示结果:
1 2 3 44 5 66 4 33 ^Z <<< Start >>> 1 2 3 4 5 33 44 66 <<< End >>> 请按任意键继续. . .