二进制在FLASH中的应用 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    二进制

    一说到二进制,我们总是或多或少的感觉没有底,因为接触的比较少,而且也不是那么直观,容易理解,这次就来谈谈在FLASH中使用二进制,老少皆宜哦,

二进制在FLASH中的应用

    首先来看一段程序var round:Number = 2;

    var sweet:Number = 4;

    var delicious:Number = 8;

    var blet:Number = 16;

    //苹果是甜的、圆的、好吃的

    var apple:Number = round | sweet | delicious;

    //下面我们来看看苹果是不是好吃的

    if(apple & delicious){

    trace("apple is delicious");

    }

    //再来看看苹果是不是圆的

    if(apple & round){

    trace("apple is round");

    }

    //再来看看苹果有没有腐烂

    //这里不会输出,因为我们先前定义的苹果并没有腐烂

    if(apple & blet){

    trace("apple is blet");

    }

    //假设我们的苹果腐烂了,那我们将加上腐烂这个属性,同时去掉美味这个属性

    apple |= blet;

    apple = apple & ~delicious;

    //我们再来看看上面的输出

    //第二个输出将不会显示

    if(apple & blet){

    trace("apple is blet");

    }

    if(apple & delicious){

    trace("apple is delicious");

    }

下面我们来分析一下上面的代码

    我首先定义了4个属性,应该注意到了这四个属性的值分别是2的N次方,其实换成2进制就是10,100,1000,10000

    接着又定义了一个apple变量,用到了"|"符号(按位 OR 运算符),官方的解释是:

    expression1 | expression2

    将 expression1 和 expression2 转换为无符号的 32 位整数,然后对于 expression1 或 expression2 的为 1 的对应位的每一位返回 1,

电脑资料

二进制在FLASH中的应用》(https://www.unjs.com)。浮点数通过舍去小数点后面的所有位来转换为整数。结果是一个新的 32 位整数。

    如果觉得不太能理解,那就以上面的例子为例。"10 | 100" 的结果是110,"110 | 1000"的结果是1110。所以apple的值其实就是二进制的1110,转换成10进制就是14

    然后又出现了一个"&"符号(按位 AND 运算符),官方解释:expression1 & expression2

    将 expression1 和 expression2 转换为 32 位无符号整数,并对整数参数的每一位执行布尔 AND 运算。浮点数通过舍去小数点后面的所有位来转换为整数。结果是一个新的 32 位整数。

    说白了,就是expression1和expression2的相同位数上必须都是1,那么在结果的对应位置上才是1,所以"apple & delicious"的运算过程就是"1110 & 1000"等于1000,所以判断成立

    在加上了blet属性后,我们去掉delicious属性,这是通过"&"和"~"共同完成的,这里又出现了一个"~"(按位 NOT 运算符),就是一个取反运算,原来是0的变1,原来是1的变0,所以"apple & ~delicious"的运算过程是:首先对delicious取反,delicious原来是1000,取反之后自然变成了0111,再与apple执行&运算,"11110 & 0111",结果是10110,相当于去掉了delicious属性

    二进制的一个比较典型的用法,就是可以用来保存多个属性,同时可以对这些属性进行基本的运算,这个在上面的代码中已经体现出来了。

    补注:

    其实,上面这种属性的声明方法并不是很明智,因为一旦属性比较多的话,还得去计算2的N次方到底等于多少,所以,可以采用下面的方法。var shifts:Number = 0;

    var ONE    = 1 << shifts++; // 1

    var TWO    = 1 << shifts++; // 2

    var THREE    = 1 << shifts++; // 4

    var FOUR    = 1 << shifts++; // 8

    "<<"(按位向左移位运算符),比如"2 << 2"的结果就是8,就是将2的2进制"10"向左移两位,也就是"1000",转换成10进制就是8。

最新文章