我今天开始阅读“编程珍珠”,在练习时遇到了这个问题“你将如何实现自己的位向量?”。当我查看解决方案时,它是这样的:
#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));
我感到困惑的地方是这个声明
1 << (i & MASK)
有人可以解释一下这里发生了什么吗?