求教关于位运算的一道题目答案的解释
题目:如何使用位逻辑运算(例如与,或,移位)来实现位向量set操作(令位向量数组第N位为1)?
答案:
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 100000
int a[1+N/BITSPERWORD]
void set(int i) {
a[i>>SHIFT] |= (1<<(i & MASK));
}
请教a[i>>SHIFT] |= (1<<(i & MASK));这个语句的注释
非常感谢!
[解决办法]
void set(int i) {
a[i>>SHIFT]
[解决办法]
= (1<<(i & MASK));
}
其实就是
void set(int i) {
a[i/32]
[解决办法]
= (1<<(i%32));
}
左移5位相当于除2^5也就是32,i & 0x1F 保留了低五位,相当于模32.
i是int类型,32位的,而a是int型数组,所以除以32可以知道是在a的数组中哪一个下标,模32可以确定某一位