位运算加速技巧

本方法可以让c语言指令进一步接近汇编指令的执行效率,提高单片机,嵌入式系统的速度和稳定性,

但编程时应采取函数化的编程法——例如使用swap()函数时,必要时加注释。

注:本例涉及一些计算机原理的思想,较为抽象,读者可利用1和2(01和10)等简单的数字进行验证,

并上机实验,以加深印象。

0.位运算心法:(掌握粗体字)

&(与逻辑):有0出0,全1出1;

|(或逻辑):有1出1,全0出1;

~(非逻辑):空即是色,色即是空;

^(异或):相异出1,相同出0;

1. 如果乘上一个2的倍数数值,可以改用左移运算(Left Shift) 加速 300%

x = x * 2;
x = x * 64;
//改为:
x = x << 1; // 2 == 21
x = x << 6; // 64 == 26

2. 如果除上一个 2 的倍数数值,可以改用右移运算加速 350%

x = x / 2;
x = x / 64;
//改为:

x = x >> 1; // 2 == 21
x = x >> 6; // 64 == 26

3. 数值转整数加速 10%

x = int(1.232)
//改为:

x = 1.232 >> 0;

4. 交换两个数值(swap),使用 XOR 可以加速20%

var t:int = a;
a = b;
b = t;
//equals:
a = a^b;
b = a^b;
a = a^b;

5. 正负号转换,可以加入 300%

i = -i;
//改为
i = ~i + 1; // NOT 写法
//或
i = (i ^ -1) + 1; // XOR 写法

6. 取余数,如果除数为 2 的倍数,可利用 AND 运算加速 600%

x = 131 % 4;
//equals:
x = 131 & (4 - 1);

7. 利用 AND 运算检查整数是否为 2 的倍数,可以加速 600%

isEven = (i % 2) == 0;
//equals:
isEven = (i & 1) == 0;

8. 加速 Math.abs 600% 的写法1,写法2 又比写法1加速 20%

//写法1
i = x < 0 ? -x : x;

//写法2

i = (x ^ (x >> 31)) - (x >> 31);

//写法3

i=x^(~(x>>31)+1)+(x>>31);

9. 比较两数值相乘之后是否拥有相同的符号,加速 35%

eqSign = a * b > 0;
//equals:
eqSign = a ^ b > 0;

其它位运算技巧
1. RGB 色彩分离

var 24bitColor:uint = 0xff00cc;
var r:uint = 24bitColor >> 16;
var g:uint = 24bitColor >> 8 & 0xFF;
var b:uint = 24bitColor & 0xFF;

2. RGB 色彩合并

var r:uint = 0xff;
var g:uint = 0x00;
var b:uint = 0xcc;
var 24bitColor:uint = r << 16 | g << 8 | b;

C语言位运算的高级应用(尤其适合单片机和嵌入式编程)相关推荐

  1. (转)C语言位运算详解

    地址:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html C语言位运算详解 作者:911 说明:本文参考了http://www2.ts ...

  2. C语言位运算,醍醐灌顶式教学

    C语言位运算,醍醐灌顶式教学 学习计算机的都了解,位运算其实以一种比较快速的运算,对于大型应用程序,可以节约很多运算时间.但是很多人都不了解,下面我来给大家大致讲解一下C语言中各种位运算符.(小声bb ...

  3. c语言位运算负数的实例_巧妙运用C语言位运算

    原标题:巧妙运用C语言位运算 位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有: &(按位与) ...

  4. c语言位运算(c语言回文数编程)

    C语言的位运算 <>2;/其实这些符号都是差不多的用法;///PUR0 = PUR0 | 0X20;/,就是相当于R0CONH = R0CONH & 0XFC;/left shif ...

  5. c语言位运算负数的实例_一招教你学会C语言中位运算

    程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.注意,位运算只针对于整数进行操作. 运算符号 运算规则 1.&与运算:对应两个二进 ...

  6. sizeof是c语言的一种运算符,C语言位运算和sizeof运算符详解

    位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...

  7. c语言位运算负数的实例_0基础学习C语言第三章:位运算

    C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移,相当与*2 >> 右移,正数高位补0,负数由计算机决定 循环左移k次 (x< ...

  8. 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记

    原标题:单片机与嵌入式系统中C语言的位运算小记 编了个PIC的项目,对里的还是蛮有感悟的,特此记录一下. 譬如说,在程序中定义了一个char类型的变量, purge_short_enable_flag ...

  9. c语言位运算+乘法,关于c语言中的位运算。。。

    标签:c++ 位运算是一种针对二进制数的一种运算 位运算 共有六种 都有其对应得操作符号 &      (and)      位于 |        (or)         位或 ~     ...

最新文章

  1. 配置System Center Data Protection Manager 2007
  2. 找出连续最长数字串python_字符串中找出连续最长的数字字符串的实例代码
  3. 服务治理·理论篇(一)
  4. DB2 常用命令小结
  5. 64 ----平面与直线之间的位置关系、平面与直线之间的交角、两直线两平面的位置关系
  6. 分享我的Latex模板(数学建模/论文通用,附下载链接)
  7. C语言实现-航空订票系统(飞机订票系统)单机版联网版
  8. android 市场 百度地图,百度地图 下载_地图导航软件_车载安卓应用_路畅市场
  9. YOLOv5数据集标注工具
  10. 《麦肯锡方法》读书笔记10
  11. 基于Java毕业设计医院诊疗信息管理源码+系统+mysql+lw文档+部署软件
  12. McAfee Epo
  13. C语言及程序设计基础 课程主页
  14. js实现下载excel
  15. 《开源安全运维平台--OSSIM最佳实践》节日期间当当自营店 五折 优惠活动开始啦!...
  16. CTF题库—实验吧(密码学)之奇妙的音乐
  17. 关于pandas的这些干货,你也必须知道!
  18. Hulu 2022春季校园招聘来啦
  19. ERP中英文缩写汇总
  20. 手眼标定AX=XB求解方法(文献总结)

热门文章

  1. 【C++】cout、cerr、clog之间的区别
  2. TensorFlow实践(15)——使用tf.device方法指定节点执行设备
  3. Python开发中的接口详解和使用方法
  4. Netbeans安装教程
  5. 编译原理词法分析中的有限自动机
  6. 数字电路基础知识——组合逻辑电路(奇偶校验电路、数据比较器的设计)
  7. 租车小程序系统开发制作功能介绍
  8. 29、光敏电阻ADC输入实验
  9. C语言程序——关系运算符的应用
  10. 达梦数据库全量数据恢复还原流程