我正在研究编程珍珠一书中的一个问题,他们推荐这个函数在位向量中设置一个位。我对它的作用有点困惑。
#define BITSPERWORD 32
#define MASK 0x1F
#define SHIFT 5
#define N 1000000
int a[1 + N/BITSPERWORD];
void set(int i){
a[i >> SHIFT] |= (1 << (i & MASK));
}
这是我对这段代码的(可能是错误的)解释。如果我 = 64,
1)首先,它将i
它向右移动 SHIFT(即 5)位。这相当于除以 (而不是像我最初想到的那样相乘i
)2^5
。所以如果i
是64
,则 a 的索引是2
(64 / 2^5)
2) a[2] |= (1 << (64 & MASK))
64 & 1 = 1000000 & 01 = 1000001
。
所以 1 左移了多少位????