我今天开始阅读《编程珠玑》这本书,在做练习时遇到了这个问题:“你会如何实现自己的位向量?” 当我看到解决方案时,它是这样的:
我感到困惑的是这个陈述。
#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)
能否有人解释一下这里正在发生什么?
(i & MASK)
替换为(i % 32)
,这样做是否有效?如果这样做是有效的但不够优雅,那么能否请您解释一下为什么i & MASK
比i % 32
更受欢迎?非常感谢。 - test123