C语言位运算的高级应用(尤其适合单片机和嵌入式编程)
位运算加速技巧
本方法可以让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语言位运算的高级应用(尤其适合单片机和嵌入式编程)相关推荐
- (转)C语言位运算详解
地址:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html C语言位运算详解 作者:911 说明:本文参考了http://www2.ts ...
- C语言位运算,醍醐灌顶式教学
C语言位运算,醍醐灌顶式教学 学习计算机的都了解,位运算其实以一种比较快速的运算,对于大型应用程序,可以节约很多运算时间.但是很多人都不了解,下面我来给大家大致讲解一下C语言中各种位运算符.(小声bb ...
- c语言位运算负数的实例_巧妙运用C语言位运算
原标题:巧妙运用C语言位运算 位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有: &(按位与) ...
- c语言位运算(c语言回文数编程)
C语言的位运算 <>2;/其实这些符号都是差不多的用法;///PUR0 = PUR0 | 0X20;/,就是相当于R0CONH = R0CONH & 0XFC;/left shif ...
- c语言位运算负数的实例_一招教你学会C语言中位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.注意,位运算只针对于整数进行操作. 运算符号 运算规则 1.&与运算:对应两个二进 ...
- sizeof是c语言的一种运算符,C语言位运算和sizeof运算符详解
位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...
- c语言位运算负数的实例_0基础学习C语言第三章:位运算
C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移,相当与*2 >> 右移,正数高位补0,负数由计算机决定 循环左移k次 (x< ...
- 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记
原标题:单片机与嵌入式系统中C语言的位运算小记 编了个PIC的项目,对里的还是蛮有感悟的,特此记录一下. 譬如说,在程序中定义了一个char类型的变量, purge_short_enable_flag ...
- c语言位运算+乘法,关于c语言中的位运算。。。
标签:c++ 位运算是一种针对二进制数的一种运算 位运算 共有六种 都有其对应得操作符号 & (and) 位于 | (or) 位或 ~ ...
最新文章
- 配置System Center Data Protection Manager 2007
- 找出连续最长数字串python_字符串中找出连续最长的数字字符串的实例代码
- 服务治理·理论篇(一)
- DB2 常用命令小结
- 64 ----平面与直线之间的位置关系、平面与直线之间的交角、两直线两平面的位置关系
- 分享我的Latex模板(数学建模/论文通用,附下载链接)
- C语言实现-航空订票系统(飞机订票系统)单机版联网版
- android 市场 百度地图,百度地图 下载_地图导航软件_车载安卓应用_路畅市场
- YOLOv5数据集标注工具
- 《麦肯锡方法》读书笔记10
- 基于Java毕业设计医院诊疗信息管理源码+系统+mysql+lw文档+部署软件
- McAfee Epo
- C语言及程序设计基础 课程主页
- js实现下载excel
- 《开源安全运维平台--OSSIM最佳实践》节日期间当当自营店 五折 优惠活动开始啦!...
- CTF题库—实验吧(密码学)之奇妙的音乐
- 关于pandas的这些干货,你也必须知道!
- Hulu 2022春季校园招聘来啦
- ERP中英文缩写汇总
- 手眼标定AX=XB求解方法(文献总结)