69,382
社区成员
发帖
与我相关
我的任务
分享
#include <limits.h> /* for CHAR_BIT */
#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)
//#define XOR(a,b) (!!(a) ^ !!(b))
#define XOR(a,b) (!!(a)!=!!(b))
// 声明一个47位的"数组"
char bitarray[BITNSLOTS(47)];
// 置第23位
BITSET(bitarray, 23);
// 测试第35位
if(BITTEST(bitarray, 35)) ...
// 计算两个位数组的并,再将结果放入另一个数组
for(i = 0; i < BITNSLOTS(47); i++) {
array3[i] = array1[i] | array2[i];
}