单片机运算符及表达式

上传人:壹****1 文档编号:507006785 上传时间:2023-12-16 格式:DOC 页数:18 大小:69KB
返回 下载 相关 举报
单片机运算符及表达式_第1页
第1页 / 共18页
单片机运算符及表达式_第2页
第2页 / 共18页
单片机运算符及表达式_第3页
第3页 / 共18页
单片机运算符及表达式_第4页
第4页 / 共18页
单片机运算符及表达式_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《单片机运算符及表达式》由会员分享,可在线阅读,更多相关《单片机运算符及表达式(18页珍藏版)》请在金锄头文库上搜索。

1、第三章 运算符及表达式说明:Cx51的运算符与普通 C语言的几乎完全一样,带复习性质,重点介绍在单片机中应用的特点。一、运算符及表达式运算符: 完成某种特定运算的符号。 运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。运算对象:在程序运行时,有数值或有数值传递给它。表达式:表达式则是由运算符及运算对象所组成的具有特定含义的式子。C是一种表达式语言,表达式后面加;号就构成了一个表达式语句。例: x=a*(b+c-a);子表达式:成对的括号以及在它们之间的全部符号组成的表达式。上例中( b+c-

2、a )就是子表达式。二、运算符1 、赋值运算符1) 赋值运算符赋值符号“ =”完成的操作即为赋值运算,它是右结合性,且优先级最低。2) 赋值表达式将一个变量与表达式用赋值号连接起来就构成赋值表达式。形式如下:变量名=表达式 赋值表达式中的表达式包括变量、算术运算表达式、关系运算表达式、逻辑运算表达式等,甚至可以是另一个赋值表达式。赋值过程是将“ =”右边表达式的值赋给“ =”左边的一个变量,赋值表达式的值就是被赋值变量的值。 例如:a=(b=4)+(c=6); ,该表达式的值为 10,变量 a 的值为 10。3) 赋值的类型转换规则在赋值运算中,当“ =”两侧的类型不一致时,要将数据转换成同一

3、数据类型,转换的方式有两种,一种是系统自动转 换,一种是强制转换。(1) 系统自动转换 编译时,将右边表达式的值转换成左侧变量的类型,再赋给该变量。转换规则如下: 实型数据赋给整型变量时,舍弃小数部分。 整型数据赋给实型变量时,数值不变,但以 IEEE 浮点数形式存储在变量中。 长字节整型数据赋给短字节整型变量时,实行截断处理。如将 long 型数据赋给 int 型变量时,将 long 型数据的低两 字节数据赋给 int 型变量,而将 long 型数据的高两字节的数据丢弃。 短字节整型数据赋给长字节整型变量时,进行符号扩展。如将int型数据赋给long型变量时,将int型数据赋给long型变量

4、的低两字节,而将 long 型变量的高两字节的每一位都设为 int 型数据的符号值。(2) 强制转换使用强制类型转换运算符转换(类型名)(表达式);将表达式的数据类型转换为前面要求的类型名O例仁 x= (float ) a;y=(int)(x+y);例2: unsigned char x,y;unsigned int z;z=x+(unsigned int)y;4) 应用在单片机中,经常要给寄存器、I/O 口赋值:(1) P1 =0xff;/给 P1 口 全置 1(2) P2=0x08; /给P2的第三位置1(3) TF0=0;/清定时器TO的溢出标志位(4) sbit P10=P1A0;/注

5、意大写bit x;x=P10;P10=!P10;2 、算术运算符c 语言中的算术运算符有:+ 加或取正值运算符- 减或取负值运算符* 乘运算符 除运算符模(求余)运算符 上面这些运算符中加、减、乘、除为双目运算符,它们要求有两个运算对象。这些大家已经很熟悉了。3 、关系运算符c 语言中有 6 种关系运算符: 大于 =大于等于 =小于等于= 等于=不等于4 种的优先级高于后 2 种。前 4 种关系运算符具有相同的优先级,后两种关系运算符也具有相同的优先级;但前 优先级别:(低)赋值运算符T关系运算符T算术运算符(高)4、逻辑运算符逻辑运算符用来求某个条件式的逻辑值。 Cx51 提供了 3 种逻辑

6、运算符:| 逻辑或 ( AND)& 逻辑与 (OR)! 逻辑非 (NOT)逻辑表达式 : 用逻辑运算符将关系表达式或逻辑量连接起来。逻辑表达式的一般形式为:逻辑与:条件式 l 条件式 2逻辑或:条件式 l | 条件式 2逻辑非: ! 条件式例如: x y、 a| b 、 !z 都是合法的逻辑表达式。0都看作逻辑 1。逻辑表达式的值是一个逻辑量真或假, 0代表假, 1代表真。在逻辑运算中,把非 例: a=4;b=0;c=a|b;/ c= 1c=a&b;/c=0;c=!a;/c=0;5 、位运算符1 )能对运算对象进行按位操作,C语言中其有6种位运算符: 按位与| 按位或A 按位异或按位取反右移位

7、运算符的作用是按位对变量进行运算,并不改变参与运算的变量值。2)位运算符的优先级从高到低依次是:按位取反()t左移()t按位与(& ) t按位异或(A) t按位或(|)3) 所有位运算符的对象是int 或 char 数据类型,不能为实数。4)位运算的应用例:P1= P1&0xf8; 将P1 口的、清零,其他位不变st = PO&Ox07;读、的值,送入变量 stP1 = P1|0x08; 将P1 口的置1,其他位不变/ 他位不变X=aAb/判断a是否与b相等,相等为05 )位左移和位右移运算符 ()位左移、位右移运算符“ ”,用来将一个数的各二进制位的全部左移或右移1 位;移位后,空白位补 0

8、,而溢出的位舍弃。注意汇编语言的区别 。例:若 a= EAHk B则表达式:a = a2,将a值左移两位,其结果为A8H汇编语言是循环移位,而C 语言不是循环移位,但有循环移位的函数Unsigned char _cror_(unsigned char c, unsigned char c);上面时循环右移函数, c 为待移动字符, b 为移动位数。循环左移函数是:Unsigned char _crol_(unsigned char c, unsigned char c);也可以自己编程循环移位。 下面讲右循环移位的例子。例1:若a= B= 0C3H,将a值右循环位移两位。对 a进行循环右移二位

9、的程序如下: #includemai n() un sig ned char a=0xc3,b,c,d;char data n=2;b=an;右移2位d=c|b;/ 结果为=OxfO,教材中方法c=_cror_(a,2);/用库函数实现(调“循环移位”演示)例2: LED动态显示时,位码要不断移动,现在用C语言编程实现。P1 = 0x08;P1=P11;/ 每显示一位后移位一次位运算符逻辑运算符取反(非)!与&或|II6 )位运算与逻辑运算的比较(1) 符号比较(2) 位运算是对各位进行运算,逻辑运算的对象是逻辑变量。例:#i nclude Mai n() unsigned char a=13

10、6,b=34,x1 ,x2,x3,x4,x5,x6;/ax仁!a; x仁0x2=a; /x2=0x77x3=a|b;/x3=1x4=a|b; /x4=0xaax5=a&b; /x5=0x00x6=a&b;/x6=1(运行“逻辑运算”)6、自增减运算符、复合运算符1)自增减运算符自增减运算符的作用是使变量值自动加1或减1。女口:+i , -I “运算符在前,先运算后使用”即:在使用i+ , i-“运算符在后,先使用后运算”即:在使用例:若i值原来为5,则j=+i;j值为6, i值也为6;j=i+;j值为5, i值为6。=0x88,b=0x22i之前,先使i之后,再使i值加(减)1。i值加(减)1

11、。2) 复合运算符及其表达式凡是二目运算符,都可以与赋值运算符“=”一起组成复合赋值运算符。Cx51共提供了 10种复合赋值运算符,即+= ,-=,*=,/ =,% =, =, &=, A=, |=。采用这种复合赋值运算的目的,是为了简化程序,提高C程序编译效率。如:a+=b相当于a=a+ba%=b相当于a=a%ba-=b相当于a=a-ba=3相当于a=a=2相当于a=a2a =b相当于a=ab7、条件运算符 :条件运算符,根据条件进行选择的运算符。关系表达式 1 表达式 2;表达式 3 ;表达式 1 的值为 1 ,执行表达式 2,否则执行表达式 3。 例: z=(ab)a : b;相当于:

12、if(ab)z=a;elsez=b;8、应用例子 下面举一个使用位操作运算扫描识别键盘的例子。1)工作原理图示为8051单片机与一个4X 4键盘接口的扫描电路。( 1 ) P1 口的高四位作为行驱动线,轮流给高4 位输出高电平,经非门变为低电平;(2)读 P1 的低 4位,如无键按下, P1 的低 4位应全为 1 ;若有键按下,则不全为 1。0,则不用新值替换旧值,(3)判断是否为同一次按键,将前次采集的值和本次采集的值相异或,同一次按键异或后为 若不一样,用新值替换旧值。源程序如下:#include#define uchar unsigned charchar data old;/ 全局变量

13、,传递数据key()uchar cl;for(cl=0x10;cl!=0;cl=cl1)/item1P仁OxOf|cl;/ 给高位轮流置1,给低位高电平,准备读端口if(P1 &OxOf)!=OxOf)判断低4为是否全为1if(P1Aold)0)/用异或判断按下的是否是新键old=P1;/不同将新值存入旧值中main()uchar i;old=Oxff;/先给旧键值赋初值for(i=1 ;i10;i+)key();iteml :在程序中使用了 for 循环,详细内容将在第四章讨论。到发现变量 cl 变成 O 为止,这段程序将循环四次。变量 cl 的初值为 Oxl0 ,在向左移动四次后,有 1 的位将变为 0,变量 cl 的所有位的值将全为 0。像汇编语言执行一个位移指令 一样,一个 指令逐次将所有移动的值填上 0。(调“键盘” )

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号