【发布时间】:2013-06-02 10:22:53
【问题描述】:
我通过将位打包到一个 uint 数组中来实现位向量。 getBit(index) 函数执行(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
【问题讨论】:
-
你能粘贴你写的实际代码吗?
-
性能提示,现在已解决有符号/无符号问题:您可以测试 AND 的结果是否为零,而不是将位移回 LSB 位置。
-
更好,但是,请参阅下面 Daniel Fisher 优雅而高效的解决方案。
-
好的,谢谢你的想法!
标签: algorithm actionscript-3 bit-manipulation