[转] 精巧的位掩码

本文探讨了位掩码在编程中的应用,特别是在VB和AS中的msgbox控制及数组排序功能实现。通过位运算符“|”组合不同常量,可以灵活地控制排序方式,并深入解析了这种做法背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我最早接触位掩码的是在刚开始学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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值