嘿,在《编程珠玑》这本书中,有一份源代码用于在实际上是一个集合表示的整数数组中设置、清除和测试给定索引位的位。
代码如下:
#include<stdio.h>
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1+ N/BITSPERWORD];
void set(int i)
{
a[i>>SHIFT] |= (1<<(i & MASK));
}
void clr(int i)
{
a[i>>SHIFT] &= ~(1<<(i & MASK));
}
int test(int i)
{
a[i>>SHIFT] & (1<<(i & MASK));
}
请问有人能为我解释一下SHIFT和MASK定义的原因吗?它们在代码中的目的是什么?
我已经阅读了之前相关的问题。