我正在研究编程珍珠一书中的一个问题,他们建议这个函数在位向量中设置一个位。我对它的作用感到有点困惑。
#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位)向右移动。这相当于DIVIDING(不是我想象的那样乘以i
2^5
。因此,如果i
为64
,则a的索引为2
(64 / 2^5)
2)a[2] |= (1 << (64 & MASK))
64 & 1 = 1000000 & 01 = 1000001
。
所以1左移多少位????
答案 0 :(得分:3)
ith
位的索引,因为这是每个字的位数。 |
,因此该函数将该位设置为不切换位%
)如果您打算使用此代码
std::bitset