• AS3中的位操作


    AS3的做法,就是当对浮点数进行位移的时候,先取整为32位,然后进行位移。
    var value:Number = 100.5;
    trace(value << 1);// output 200

    而当我们使用其他高级语言中并不是这样的,浮点数是不被允许进行位移操作的。

    左位移几就相当于乘以2的几次方:
    x = x * 2;
    x = x * 64;   
    //相当于:
    x = x << 1;
    x = x << 6;

    右位移几就相当于除以2的几次方:
    x = x / 2;
    x = x / 64;   
    //相当于:
    x = x >> 1;
    x = x >> 6;

    Number 到 integer(整数)转换:
    x = int(1.232)
    //相当于:          
    x = 1.232 >> 0;


    提取颜色组成成分:

    //24bit
    var color:uint = 0x336699;
    var r:uint = color >> 16;
    var g:uint = color >> 8 & 0xFF;
    var b:uint = color & 0xFF;
    //32bit
    var color:uint = 0xff336699;
    var a:uint = color >>> 24;
    var r:uint = color >>> 16 & 0xFF;
    var g:uint = color >>> 8 & 0xFF;
    var b:uint = color & 0xFF;


    合并颜色组成成分:
    //24bit
    var r:uint = 0x33;
    var g:uint = 0x66;
    var b:uint = 0x99;
    var color:uint = r << 16 | g << 8 | b;
    //32bit
    var a:uint = 0xff;
    var r:uint = 0x33;
    var g:uint = 0x66;
    var b:uint = 0x99;
    var color:uint = a << 24 | r << 16 | g << 8 | b;


    使用异或运算交换整数而不需要用临时变量:

    var t:int = a;
    a = b;
    b = t;
    //相当于:
    a ^= b;
    b ^= a;
    a ^= b;


    自增/自减:

    i = -~i; // i++
    i = ~-i; // i--

    取反:

    i = -i;
    //相当于:
    i = ~i + 1;
    //或者
    i = (i ^ -1) + 1;



    使用bitwise AND快速取模:

    如果除数是2的次方,取模操作可以这样做:
    模数= 分子 & (除数 - 1);
    x = 131 % 4;
    //相当于:
    x = 131 & (4 - 1);

    检查是否为偶数:
    isEven = (i % 2) == 0;
    //相当于:
    isEven = (i & 1) == 0;


    绝对值:
    //version 1
    i = x < 0 ? -x : x;
    //version 2
    i = (x ^ (x >> 31)) - (x >> 31);


    判断是否同号
    eqSign = a * b > 0;
    //equals:
    eqSign = a ^ b >= 0;

  • 相关阅读:
    2004选拔赛 最小值
    [JSOI2008]最大数maxnumber
    HDOJ 2896 病毒侵袭
    POJ 2243 Knight Moves
    HDOJ Is It A Tree?
    MST 小希的迷宫
    PKU 3278 Catch That Cow
    POJ 2488 A Knight's Journey
    [SCOI2006]整数划分
    COJ 1259: 跳跳
  • 原文地址:https://www.cnblogs.com/ztdy/p/3601526.html
Copyright © 2020-2023  润新知