嘿,在编程珍珠书中,有一个源代码用于设置,清除和测试一个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和掩模限定的原因是什么?他们在代码中的目的是什么?
我已经阅读过以前的相关question。
+1,比我的一般答案更准确。 – VonC 2008-11-06 07:25:42
谢谢,那正是我所需要的。 – 2008-11-06 07:31:52