zoukankan      html  css  js  c++  java
  • AS3的位运算符技巧

    左位移几就相当于乘以2的几次方( Left bit shifting to multiply by any power of two ) //将一个值向左侧移动一位与这个值乘以 2 等效。浮点数通过舍去小数点后面的所有位来转换为整数。 大约快了300%

    x = x * 2; x = x * 64; //相当于: x = x << 1; x = x << 6;

    右位移几就相当于除以2的几次方(Right bit shifting to divide by any power of two) //将一个值右移一位等效于将它除以 2 并舍去余数。浮点数通过舍去小数点后面的所有位来转换为整数。 大约快了350%

    x = x / 2; x = x / 64; //相当于: x = x >> 1; x = x >> 6;

    Number 到 integer(整数)转换
    在AS3中使用int(x)快了10% 。尽管如此位操作版本在AS2中工作的更好

    x = int(1.232) //相当于: x = 1.232 >> 0;

    提取颜色组成成分
    不完全是个技巧,是正常的方法 (Not really a trick, but the regular way of extracting values using bit masking and shifting.)

    //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;

    合并颜色组成成分
    替换值到正确位置并组合他们 (‘Shift up’ the values into the correct position and combine them.)

    //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;

    使用异或运算交换整数而不需要用临时变量
    很可爱的技巧, 在本页顶端的链接里有详细的解释 ,这里快了 20%

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

    自增/自减(Increment/decrement)
    这个比以前的慢不少,但却是个模糊你代码的好方法;-)

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

    取反(Sign flipping using NOT or XOR)
    另人奇怪的是这个居然快了300%!

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

    使用bitwise AND快速取模(Fast modulo operation using bitwise AND)
    如果除数是2的次方,取模操作可以这样做:
    模数= 分子 & (除数 - 1);
    这里大约快了600%

    x = 131 % 4; //相当于: x = 131 & (4 - 1);

    检查是否为偶数(Check if an integer is even/uneven using bitwise AND)
    这里快了 600%

    isEven = (i % 2) == 0; //相当于: isEven = (i & 1) == 0;

    绝对值
    忘记 Math.abs()吧 (Forget Math.abs() for time critical code.)
    version 1 比 Math.abs() 快了2500% ,version 2 居然比 version 1 又快了20% !

    //version 1 i = x < 0 ? -x : x; //version 2 i = (x ^ (x >> 31)) - (x >> 31);
  • 相关阅读:
    自学入门 Python 优质中文资源索引
    Crawlab Lite 正式发布,更轻量的爬虫管理平台
    一款被大厂选用的 Hexo 博客主题
    源码解读 Golang 的 sync.Map 实现原理
    探究 Go 语言 defer 语句的三种机制
    一道快速考察 Python 基础的面试题
    编写自己的 GitHub Action,体验自动化部署
    Python 2 与 3 共存了 11 年,新年就要和它道别
    30 年前的圣诞节,Python 序章被谱写
    文言文编程火了,可我完全学不懂
  • 原文地址:https://www.cnblogs.com/SmileYG/p/3060098.html
Copyright © 2011-2022 走看看