日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言 字符串map,C语言实现BitMap

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。