嘿,在 Programming Pearls 书中,有一个源代码用于设置、清除和测试 int 数组中的一些给定索引,实际上是一个集合表示。
代码如下:
#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 定义的原因吗?它们在代码中的用途是什么?
我已经阅读了之前的相关问题。