我还不是一个职业程序员,也没有写过太多的代码,目前还只是一个爱好者吧。目前为止,我从来没有使用过按位运算和操作,不论是在C++或者AS的实际应用中……不对,应该说没有刻意主动使用过,特别是用于实际操作中。今天看到一些启发,记录一下:
首先,为什么要使用按位运算?——能节省在二进制数据和布尔数据之间转换的步骤,所以只要可能,就应该用按位操作来代替布尔操作。这样做得越多,对程序的执行效果提高也越多!
1、按位操作处理颜色
RGB值通常由6位十六进制表示,红绿蓝各2位,而2位十六进制正好可以用8位二进制表示(一个字节)。
因此,将三种颜色值组成一个RGB值采用按位操作就可以这样做:
Action Script:
var nRed:Number = 12;
var nGreen:Number = 10;
var nBlue:Number = 233;
var nRGB:Number = nRed<<16 | nGreen<<8 | nBlue;
将一个RGB值分开成三种颜色值的做法:
var nRed:Number = nRGB >> 16 & 0xFF;
var nGreen:Number = nRGB >> 8 & 0xFF;
var nBlue:Number = nRGB & 0xFF;
2、使用标志变量
标志变量是一种设置跟踪变量的集合,是一种使用一个单独变量来跟踪多个设置值的方法。RGB值就是一个典型的应用,它通过一个RGB值跟踪3个设置值。
更常用的 标志变量像布尔变量那样使用每一位,用一个单独变量替代多个布尔值。
例:
设置变量表示功能:
var RIGHT_SIDE_UP:Number = 1; // 2^0
var DRAGGABLE:Number = 2; // 2^1
var PLAYING:Number = 4; // 2^2
var VISIBLE:Number = 8; // 2^3
var nFlag:Number = 4; // 0 100
按位“或”用于打开:
nFlag |= VISIBLE; // 1 100
按位“与”和按位“取反”使某位关闭(清位)
nFlag &= ~PLAYING; // 1 000
按位“异或”用于切换
nFlag ^= DRAGGABLE; // 1 010
首先,为什么要使用按位运算?——能节省在二进制数据和布尔数据之间转换的步骤,所以只要可能,就应该用按位操作来代替布尔操作。这样做得越多,对程序的执行效果提高也越多!
1、按位操作处理颜色
RGB值通常由6位十六进制表示,红绿蓝各2位,而2位十六进制正好可以用8位二进制表示(一个字节)。
因此,将三种颜色值组成一个RGB值采用按位操作就可以这样做:
Action Script:
var nRed:Number = 12;
var nGreen:Number = 10;
var nBlue:Number = 233;
var nRGB:Number = nRed<<16 | nGreen<<8 | nBlue;
将一个RGB值分开成三种颜色值的做法:
var nRed:Number = nRGB >> 16 & 0xFF;
var nGreen:Number = nRGB >> 8 & 0xFF;
var nBlue:Number = nRGB & 0xFF;
2、使用标志变量
标志变量是一种设置跟踪变量的集合,是一种使用一个单独变量来跟踪多个设置值的方法。RGB值就是一个典型的应用,它通过一个RGB值跟踪3个设置值。
更常用的 标志变量像布尔变量那样使用每一位,用一个单独变量替代多个布尔值。
例:
位置编号 | 3 | 2 | 1 | 0 |
功能 | 是否可见 | 是否播放 | 是否可拖拽 | 是否右边向上 |
值 | 1 | 0 | 0 | 1 |
设置变量表示功能:
var RIGHT_SIDE_UP:Number = 1; // 2^0
var DRAGGABLE:Number = 2; // 2^1
var PLAYING:Number = 4; // 2^2
var VISIBLE:Number = 8; // 2^3
var nFlag:Number = 4; // 0 100
按位“或”用于打开:
nFlag |= VISIBLE; // 1 100
按位“与”和按位“取反”使某位关闭(清位)
nFlag &= ~PLAYING; // 1 000
按位“异或”用于切换
nFlag ^= DRAGGABLE; // 1 010