第三章 运算符及表达式
说明:Cx51的运算符与普通C语言的几乎完全一样,带复习性质,重点介绍在单片机中应用的特点。
一、运算符及表达式
运算符:完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。
运算对象:在程序运行时,有数值或有数值传递给它。
表达式:表达式则是由运算符及运算对象所组成的具有特定含义的式子。C是一种表达式语言,表达式后面加";"号就构成了一个表达式语句。
例:x=a*(b+c-a);
子表达式:成对的括号以及在它们之间的全部符号组成的表达式。上例中
(b+c-a)就是子表达式。
二、运算符
1、赋值运算符
1) 赋值运算符
赋值符号“=”完成的操作即为赋值运算,它是右结合性,且优先级最低。
2) 赋值表达式
将一个变量与表达式用赋值号连接起来就构成赋值表达式。形式如下:
变量名=表达式
赋值表达式中的表达式包括变量、算术运算表达式、关系运算表达式、逻辑运算表达式等,甚至可以是另一个赋值表达式。赋值过程是将“=”右边表达式的值赋给“=”左边的一个变量,赋值表达式的值就是被赋值变量的值。
例如:
a=(b=4)+(c=6);,该表达式的值为10,变量a 的值为10。
3) 赋值的类型转换规则复合赋值运算符的含义
在赋值运算中,当“=”两侧的类型不一致时,要将数据转换成同一数据类型,转换的方式有两种,一种是系统自动转换,一种是强制转换。
(1)系统自动转换
编译时,将右边表达式的值转换成左侧变量的类型,再赋给该变量。转换规则如下:
① 实型数据赋给整型变量时,舍弃小数部分。
② 整型数据赋给实型变量时,数值不变,但以IEEE 浮点数形式存储在变量中。
③ 长字节整型数据赋给短字节整型变量时,实行截断处理。如将long 型数据赋给int型变量时,将long 型数据的低两字节数据赋给int 型变量,而将long 型数据的高两字节的数据丢弃。
④ 短字节整型数据赋给长字节整型变量时,进行符号扩展。如将int 型数据赋给long型变量时,将int 型数据赋给long 型变量的低两字节,而将long 型变量的高两字节的每一位都设为int 型数据的符号值。
(2)强制转换
使用强制类型转换运算符转换:
  (类型名) (表达式);
  将表达式的数据类型转换为前面要求的类型名。
例1: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;//清定时器T0的溢出标志位
  (4)sbit P10=P1^0;//注意大写
        bit x;
        x=P10;
        P10=!P10;
2、算术运算符
    c语言中的算术运算符有:
    +  加或取正值运算符
    - 减或取负值运算符
    *  乘运算符
    /  除运算符
    %模(求余)运算符
    上面这些运算符中加、减、乘、除为双目运算符,它们要求有两个运算对象。
这些大家已经很熟悉了。
  3、关系运算符
    c语言中有6种关系运算符:
    >  大于
    <  小于
    >=大于等于
    <=小于等于
    ==  等于
    !=不等于
前4种关系运算符具有相同的优先级,后两种关系运算符也具有相同的优先级;但前4种的优先级高于后2种。
优先级别:
(低)赋值运算符→关系运算符→算术运算符(高)
4、逻辑运算符
逻辑运算符用来求某个条件式的逻辑值。 Cx51提供了3种逻辑运算符:
  ||  逻辑或(    AND)
  &&  逻辑与(OR)
  !  逻辑非(NOT)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。