转自:http://blog.csdn.net/qibaoyuan/article/details/5914746
代码实现:通过mod操作将指定数 i 映射到bitmap[i/32]的第 i mod 32 (从0开始)位。
bitmap的基本操作:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define WORD 32 4 #define SHIFT 5 ////移动5个位,左移则相当于乘以32,右移相当于除以32取整 5 #define MASK 0x1F //16进制下的31 6 #define N 10000000 7 /* 8 * 置位函数——用"|"操作符,i&MASK相当于mod操作 9 * m mod n 运算,当n = 2的X次幂的时候,m mod n = m&(n-1) 10 */ 11 void set(int *bitmap, int i) { 12 bitmap[i >> SHIFT] |= (1 << (i & MASK)); 13 } 14 /* 清除位操作,用&~操作符 */ 15 void clear(int *bitmap, int i) { 16 bitmap[i >> SHIFT] &= ~(1 << (i & MASK)); 17 } 18 /* 测试位操作用&操作符 */ 19 int test(int *bitmap, int i) { 20 return bitmap[i >> SHIFT] & (1 << (i & MASK)); 21 }