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 >>>
请按任意键继续. . .

 

posted @ 2021-02-20 15:32  joyce3800  阅读(44)  评论(0编辑  收藏  举报