查找数字位置的位掩码

时间:2011-12-21 05:58:10

标签: flash actionscript-2 bit-manipulation bit

我正在尝试为游戏制作逻辑(在Flash中)。在一个部分中,给出以下行:

_ _ * _ _ __ *

我需要查找*之间的所有空格是否为空(行中可能出现*以外的非空值)。 此操作经常进行 我想知道我是否可以使用行的位表示来实现这一点,而不是循环并检查中间位置。

对于代表_ _ * _ _ _ *xx1xxx1 = 1或0)的行x,我可以将其与0001110进行对比,以便答案为{{1} },中间位置是空的。

这里的问题当然是如何使用位操作(在Flash AS2中)找到第二个映射(上面0000000)? (图(1,4) - > 0110,(1,3) - > 0100等)
或者循环通过中间位置只是更好的选择?

1 个答案:

答案 0 :(得分:2)

你可以通过移动一些位来做到这一点。

var bits:int = 0x7F; // 7 bits
var mask:int = ((bits >> (bits - end)) << start) & bits;

我不确定你是如何计算这些位置的,在这个例子中你似乎是从左边开始的,从一个开始 - 我要从右边算起,从零开始,这是更多常见的我猜。因此,start的值是第一个1的位置(从右侧开始,从零开始向上计数)和end最左侧1的位置。

它如何详细工作的一个例子:

// row:          xx1xxx1
// desired mask: 0001110
//               the sequence of ones in the mask starts at 1, ends at 3

bits = 0x7F;        // 1111111
mask = bits >> 4;   // 0000111
mask = mask << 1;   // 0001110

另一种描述方式:bits-(end+1)是左边的零的数量,而start是一系列的右边的零的数量。