嘿,在編程珍珠書中,有一個源代碼用於設置,清除和測試一個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