C實現bitmap位圖

轉載:點擊打開鏈接


所謂的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));
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章