70,023
社区成员




#include <stdio.h>
//设置MASK的位置,模8是为了限制最多只能左移7位.
//如BITMASK(2) 的值为0x04
#define BITMASK(b) (1 << ((b) % 8))
//除8相当于将b右移三位
//如BITSLOT(0X08)值为1
#define BITSLOT(b) ((b) / 8)
//将数组a的第b/8个元素的第b位置为1
#define BITSET(a, b) ((a)[BITSLOT(b)] |= BITMASK(b))
//数组a的第b/8个元素的第b位置是否为1,如为1,则表达式为1,为0则表达式为0
#define BITTEST(a, b) ((a)[BITSLOT(b)] & BITMASK(b))
int main(void)
{
unsigned int a[100];
a[BITSLOT(0x17)] = 0x00;
printf("%d\n",BITMASK(0x17));
printf("%d\n",BITSLOT(0x17));
printf("%d\n",BITSET(a,0x17));
printf("%d\n",BITTEST(a,0x17));
system("pause");
}
#define BITMASK(b) (1<<((b)%8))//相当于 2^(b)%8) [1左移((b)%8))]
#define BITSLOT(b) ((b)/8) //这个简单了
#define BITSET(a, b) ((a)[BITSLOT(b)]|=BITMASK(b))//数组元素 a[BITSLOT(b)]和BITMASK(b)
//做按位或操作 然后赋值给a[BITSLOT(b)]
#define BITTEST(a, b) ((a)[BITSLOT(b)]&BITMASK(b))
//数组元素 a[BITSLOT(b)]和BITMASK(b)做位与操作