我正在研究《编程珠玑》一书中的一个问题,他们推荐使用此函数来设置位向量中的位。但是我对它的作用有些困惑。
#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));
}
这里是我(可能错误的)对这段代码的解释:
如果i = 64,
1)首先,它将i向右移SHIFT(即5)位。这相当于将i除以2^5而不是乘以2^5,这点与我最初的想法不同。因此,如果i是64,则a的索引为2(64/2^5)。
2)a[2] |= (1 << (64 & MASK)), 64 & 1 = 1000000 & 01 = 1000001。 1会左移多少位?
i
是int
而不是unsigned int
吗?这段代码是从哪里来的? - Grijesh Chauhan(64 / 2^5)
жҲ–иҖ…еҸӘжңү2 (64 / 2^5)
... еҰӮжһң1000 >> 1
==0100
пјҢйӮЈд№Ҳx >> 5
е°ұзӯүдәҺx / 2^5
гҖӮ - Grijesh Chauhanstd::bitset
。它已经实现了大部分您想要的功能(可能还有更多)。 - Jerry Coffin