最近一直在使用bitmap,今天有时间了,写点东西总结一下,使用bitmap首先是节省空间。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define SHIFT 5 //32
#define MASK 0x1F //32
int bitMap[10000];
void set(int n){
// printf("%d\n",n>>SHIFT);
bitMap[n>>SHIFT]|=1<<(n&MASK);
}
void clr(int n){
bitMap[n>>SHIFT]&=1<<(!(n%MASK));
}
int test(int n){
unsigned int flag;
flag=bitMap[n>>SHIFT]&1<<(n&MASK);
return flag>0?1:0;
}
int main(){
memset(bitMap,0,10000*4);
int a;
int n=41;
set(n);
a=test(n);
printf("%d\n",a);
// printf("%x\n",bitMap[1]);
// printf("%x\n",1<<(n&MASK));
clr(41);
a=test(41);
printf("%d\n",a);
return 0;
}
由于c/c++ 不支持直接对位进行运算,所以bitmap主要是实现从字节到位的转换,熟悉各种移位操作。