原理
稍後補充
代碼
#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;
}