C语言中的移位运算

时间:12-03-13 栏目:编程之美 作者:JH单片机 评论:0 点击: 5,274 次



发一篇不是很有质量的文章,主要是说说在二进制方面的移位运算方法。有时候

用移位运算比起简单的除法,乘法要来得更猛一些。为什么呢?原因就是移位指

令的长度短以及运算时间都比普通乘法、除法要快得多。其次,用移位指令对数

据进行处理,有时显得方便些。

分享这几天在学习中看到的一篇文章。很简单的例子,其实据我了解的移位方面

的方便,不止这些,苦于没时间分享。下一次,给大家来点猛料!

有些编译器和硬件是支持乘除法和浮点运算,运用起来也是很方便!唯一让我不

满的就是很占用ROM !

分母是为 2的平方的情况下成立!
2.4.8.16.32.64.128.256.512.1024.2048......

左移1位 相当于 乘以2
左移2位 相当于 乘以4
左移3位 相当于 乘以8
左移4位 相当于 乘以16
......
是以一累加, 乘以2的平方累加

右移1位 相当于 除以2
右移2位 相当于 除以4
右移3位 相当于 除以8
右移4位 相当于 除以16
......
是以一累减, 乘以2的平方累减

 

类题一:LM75A 温度传感器中的温度转换!

1、保留了两位小数点
value  =t*0.125;    0.125为 8分之一乘以100= 8分之100
t =value * 100;

相当于
t = (t << 6)+(t << 5)+(t << 2);
64        32      4         刚好为 100
t = t>>3;
相当于除 8

¦lt;br /> 2、保留了一位小数点
value  =t*1.25;     1.25 为  4分之5
相当于
t = (t << 2) + t;
4 ¦lt;br />  t = t >> 2;
¦lt;br /> 类题二:DS18B20 温度传感器中的温度转换!

1、保留了两位小数点
value  =t*0.0625;

t =value * 100;             t = 1/16 * 100 = 25/4;

相当于
t = (t << 4)+(t << 3)+ t ;
16        8      1         刚好为 25

t = t>>2;
相当于除 4
¦lt;br /> 2、保留了一位小数点
value  =t*0.628;     0.628 为  8分之5
相当于
t = (t << 2) + t;
4 ¦lt;br />  t = t >> 3;
相当于除 8

 
关于本文作者

爱数电,爱模电;爱单片机,爱嵌入式;爱EDA,也爱DSP; 爱Altium Designer,也爱PCB;爱生活,同时也爱微博…… 一个自动化专业的学生,与志同道合者学习交流!!!

QQ 号码:594420349
腾讯微博:http://t.qq.com/kevin_753

项目合作