C語言實現BitMap

原理

稍後補充

代碼

#include <stdio.h>
#include <math.h>

#define TYPE int
#define INT_BITS (1<<3) * sizeof(TYPE)
#define SHIFT (int)(log(INT_BITS)/log(2))
#define MASK INT_BITS-1

TYPE bitmap[10000];

// 設置
void setBit(int num);
// 是否存在
int containBit(int num);
// 獲得當前位置的第幾位
int getBit(int num);
// 刪除
int deleteBit(int num);

int main(){

	printf("int_bits = %d, shift = %d, mask = %d\n", INT_BITS, SHIFT, MASK);
	setBit(2);
	printf("是否存在%d\n", containBit(2));
	printf("是否存在%d\n", containBit(3));
	deleteBit(2);
	printf("是否存在%d\n", containBit(2));
	printf("是否存在%d\n", containBit(3));
	setBit(2);
	printf("是否存在%d\n", containBit(2));
	printf("是否存在%d\n", containBit(3));

	printf("2在當前的位置%d\n", getBit(2));
	setBit(32);
	printf("32在當前的位置%d\n", getBit(32));

	return 0;
}

void setBit(int num){
	 bitmap[num >> SHIFT] |= 1 << (num & MASK);
	 printf("set --[%d]: %d\n", num >> SHIFT, bitmap[num >> SHIFT]);
}

int containBit(int num){
	return (bitmap[num >> SHIFT] & 1 << (num &MASK)) ==  1 << (num &MASK);
}

int getBit(int num){
	return num & MASK;
}
// 刪除
int deleteBit(int num){
	bitmap[num >> SHIFT] &= ~(1 << (num & MASK));
	printf("del -- [%d] : %d\n", num >> SHIFT, bitmap[num >> SHIFT]);
	return -1;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章