我最早接触位掩码的是在刚开始学VB的时候,那时候根本不知道真么是位的概念。只记得vb在弹出一个msgbox的时候,是通过几个参数的或运算来控制,是警告框还是提示框,是只有一个确定按钮还是有确定取消等按钮的。
其实在接触AS后也有在使用位掩码,只是一直没有注意过。位图API中我们可以看到很多的通道之间的操作。而最常用的就是AS原生的Array类了。他提供的排序方法,功能强大而且速度非常快。如果我们想让一个数组按数字降序排序,只需要简单的调用即可。
那么为什么我们吧这两个常量进行与运算,就能进行数字和倒序的排序呢,原理是什么呢。
我们会发现Array的几个常量都是有规律的。
这样似乎看不出什么,但是如果我们把这些常量转化为二进制(这里只写出低八位)1 –> 0000 00012 –> 0000 00104 –> 0000 01008 –> 0000 100016–> 0001 0000
这样就很明显了。Array.NUMERIC | Array.DESCENDING的结果就是 0001 0010传进了sort函数,就可以通过这样来判断
两个数进行与运算,同位上全1才是1,如果我们没有传入Array.NUMERIC,那么param & Array.
其实在接触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.