轉載:點擊打開鏈接
所謂的Bit-map就是用一個bit位來標記某個元素對應的Value, 而Key即是該元素。由於採用了Bit爲單位來存儲數據,因此在存儲空間方面,可以大大節省。例如對於號碼89256,由於89256 mod 32=2789…8,這樣我們應該置a[2789]中32位字符串的第8位(從低位數起)爲1.
基本的操作:
#define WORD 32
#define SHIFT 5 ////移動5個位,左移則相當於乘以32,右移相當於除以32取整
#define MASK 0x1F //16進制下的31
#define N 10000000
int bitmap[1 + N / WORD];
/*
* 置位函數——用"|"操作符,i&MASK相當於mod操作
* m mod n 運算,當n = 2的X次冪的時候,m mod n = m&(n-1)
*/
void set(int i) {
bitmap[i >> SHIFT] |= (1 << (i & MASK));
}
/* 清除位操作,用&~操作符 */
void clear(int i) {
bitmap[i >> SHIFT] &= ~(1 << (i & MASK));
}
/* 測試位操作用&操作符 */
int test(int i) {
return bitmap[i >> SHIFT] & (1 << (i & MASK));
}