c语言 字符串map,C语言实现BitMap
BitMap的原理不用多說了。
主要說下位操作。
我們假設每個基礎存儲單元為char,則BYTESIZE = 8,如果為int則16 or 32。
當設置i時,首先ptr+=i/BYTESIZE,到達要操作的那個char。
然后對*ptr |= 0x01<
檢查的時候,也是首先ptr+=i/BYTESIZE,然后查 (*ptr&0x01<
上面這個0x01<
代碼如下:
#include
#include
#include
#define BYTES 1024
#define BYTESIZE 8
char buffer[BYTES];
char pre[8] = {0x01<<0, 0x01<<1, 0x01<<2, 0x01<<3, 0x01<<4, 0x01<<5, 0x01<<6, 0x01<<7};
void bitmap_init(char* buf, int n)
{
memset(buf, 0, sizeof(char)*n);
}
void bitmap_set(char* buf, int n, int i)
{
int add = i/BYTESIZE;
int pos = i%BYTESIZE;
if(add>=n)
{
return ;
}
buf += add;
*buf |= pre[pos]; //*buf |= (0x01<
}
int bitmap_check(char* buf, int n, int i)
{
int add = i/BYTESIZE;
int pos = i%BYTESIZE;
if(add>=n)
{
return 0;
}
buf += add;
return (*buf&pre[pos])==pre[pos]; // return (*ptr&0x01<
}
void bitmap_print(char* buf, int n)
{
int i;
int j;
char bs[BYTESIZE];
for(i=0;i
{
bs[i] = 0x01<
}
for(i=0;i
{
for(j=0;j
{
if((*buf&bs[j])==bs[j])
{
printf("%d\n", i*BYTESIZE+j);
}
}
buf++;
}
}
int main()
{
bitmap_init(buffer, BYTES);
bitmap_set(buffer, BYTES, 999);
printf("%d\n", bitmap_check(buffer, BYTES, 999));
printf("%d\n", bitmap_check(buffer, BYTES, 998));
bitmap_print(buffer, BYTES);
return 0;
}
總結
以上是生活随笔為你收集整理的c语言 字符串map,C语言实现BitMap的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Integer 中的缓存类Integer
- 下一篇: 在main函数前后执行的函数之 C语言