首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求教关于位演算的一道题目答案的解释

2013-08-09 
求教关于位运算的一道题目答案的解释题目:如何使用位逻辑运算(例如与,或,移位)来实现位向量set操作(令位向

求教关于位运算的一道题目答案的解释
题目:如何使用位逻辑运算(例如与,或,移位)来实现位向量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可以确定某一位

热点排行