转自: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 }
View Code

相关文章:

  • 2021-07-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-07
  • 2021-11-18
  • 2022-02-04
  • 2021-11-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-19
  • 2021-09-03
  • 2022-01-17
相关资源
相似解决方案