实现位数组

来源:互联网 发布:国际大数据医疗公司 编辑:程序博客网 时间:2024/05/12 22:35

实现位数组的方式很多,下面是<c programming FAQs>中提供的方法:
#include <limits.h>
#define BITMASK(b) (1 << ((b) % CHAR_BIT))
#define BITSLOT(b) ((b) / CHAR_BIT)
#define BITSET(a, b) ((a)[BITSLOT(b)] |= BITMASK(b))
#define BITCLEAR(a, b) ((a)[BITSLOT(b)] &= ~BITMASK(b))
#define BITTEST(a, b) ((a)[BITSLOT(b)] & BITMASK(b))
#define BITNSLOTS(nb) ((nb + CHAR_BIT - 1)/CHAR_BIT)
例子:
1.声明47位的数组
char bitarray[BITNSLOTS(47)];
2.置第23位
BITSET(bitarray, 23);
3.测试第35位
if(BITTEST(bitarray, 35)) ...
4.利用位数组计算素数
#include <stdio.h>
#include <string.h>
#define MAX 100
int main() {
    char bitarray[BITNSLOTS(100)];
    int i, j;
    memset(bitarray, 0, 100);
    for(i = 2; i < MAX; i++) {
        if(!BITTEST(bitarray, i)) {
            printf("%d/n", i);
            for(j = i + i; j < MAX; j += i)
                BITSET(bitarray, j);
        }
    }
    return 0;
}

原创粉丝点击