首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

[转] 灵敏的位掩码

2012-12-25 
[转] 精巧的位掩码我最早接触位掩码的是在刚开始学VB的时候,那时候根本不知道真么是位的概念。只记得vb在弹

[转] 精巧的位掩码
我最早接触位掩码的是在刚开始学VB的时候,那时候根本不知道真么是位的概念。只记得vb在弹出一个msgbox的时候,是通过几个参数的或运算来控制,是警告框还是提示框,是只有一个确定按钮还是有确定取消等按钮的。

其实在接触AS后也有在使用位掩码,只是一直没有注意过。位图API中我们可以看到很多的通道之间的操作。而最常用的就是AS原生的Array类了。他提供的排序方法,功能强大而且速度非常快。如果我们想让一个数组按数字降序排序,只需要简单的调用即可。

arr.sort(Array.NUMERIC | Array.DESCENDING);

那么为什么我们吧这两个常量进行与运算,就能进行数字和倒序的排序呢,原理是什么呢。
我们会发现Array的几个常量都是有规律的。
public static const CASEINSENSITIVE:uint = 1;public static const DESCENDING:uint = 2;public static const UNIQUESORT:uint = 4;public static const RETURNINDEXEDARRAY:uint = 8;public static const NUMERIC:uint = 16;

这样似乎看不出什么,但是如果我们把这些常量转化为二进制(这里只写出低八位)1 –> 0000 00012 –> 0000 00104 –> 0000 01008 –> 0000 100016–> 0001 0000
这样就很明显了。Array.NUMERIC | Array.DESCENDING的结果就是 0001 0010传进了sort函数,就可以通过这样来判断
if(param & Array.NUMERIC){trace("numeric");}

两个数进行与运算,同位上全1才是1,如果我们没有传入Array.NUMERIC,那么param & Array.

热点排行