我通过将位打包到一个 uint 数组中来实现位向量。该getBit(index)
函数执行 a(array[cell] & (1 << bit)) >> bit
来获取某个位是否已设置。这对除 MSB 之外的所有位都非常有效。它不起作用的示例如下。
array[cell] = 11111001 11100000 00000000 00000000
(1 << bit) = 10000000 00000000 00000000 00000000
& operation = 01111001 11100000 00000000 00000000
我无法弄清楚为什么按位与运算似乎像 XOR 一样运行。要么是那个,要么是 MSB 未设置。谁能解释发生了什么?
编辑:实际代码
var cell:uint = int(index / 32);
var bit:uint = 32 - (index % 32) - 1;
return (array[cell] & (1 << bit)) >> bit;
在不起作用的情况下,index = 0