您的当前位置:首页正文

单片机C语言必备-运算符与关键字集

来源:画鸵萌宠网


单片机C语言的必备基础

对单片机C语言来说,掌握以下几点是必须的,尤其对初学者来讲,更是要熟记的:

一、 单片机C语言的运算符和表达式

1.1运算符的种类、优先级和结合性

C语言中运算符和表达式数量之多,在高级语言中是少见的。正是丰富的运算符和表达式使c语言功能十分完善。这也是c语言的主要特点之一。

C语言的运算符不仅具有不同的优先级,而且还有一个特点,就是它的结合性。在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算。这种结合性是其它高级语言的运算符所没有的,因此也增加了c语言的复杂性。

1.2运算符的种类

C语言的运算符可分为以下几类: 1.算术运算符

用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。

2.关系运算符

用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。

3.逻辑运算符

用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 4.位操作运算符

参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。

5.赋值运算符

用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

6.条件运算符

这是一个三目运算符,用于条件求值(?:)。 7.逗号运算符

用于把若干表达式组合成一个表达式(,)。 8.指针运算符

用于取内容(*)和取地址(&)二种运算。 9.求字节数运算符

用于计算数据类型所占的字节数(sizeof)。 10.特殊运算符

有括号(),下标[],成员(→,.)等几种。

1.3优先级和结合性

C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。

C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先

执行y=z再执行x=(y=z)运算。 c语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

1.4 算术运算符和算术表达式基本的算术运算符

1.加法运算符“+”加法运算符为双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有右结合性。

2.减法运算符“-”减法运算符为双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。

3.乘法运算符“*”双目运算,具有左结合性。

4.除法运算符“/”双目运算具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。

void main(){

printf(\\\"\\\\n\\\\n%d,%d\\\\n\\\ printf(\\\"%f,%f\\\\n\\\ }

双目运算具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。 printf(\\\"\\\\n\\\\n%d,%d\\\\n\\\ printf(\\\"%f,%f\\\\n\\\

本例中,20/7,-20/7的结果均为整型,小数全部舍去。而20.0/7和-20.0/7由于有实数参与运算,因此结果也为实型。

5.求余运算符(模运算符)“%”双目运算,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数相除后的余数。

void main(){

printf(\\\"%d\\\\n\\\ }

双目运算,具有左结合性。求余运算符%要求参与运算的量均为整型。本例输出100除以3所得的余数1。

自增1,自减1运算符

自增1运算符记为“++”,其功能是使变量的值自增1。自减1运算符记为“--”,其功能是使变量值自减1。自增1,自减1运算符均为单目运算,都具有右结合性。可有以下几种形式: ++i i自增1后再参与其它运算。--i i自减1后再参与其它运算。

i++i参与运算后,i的值再自增1。 i--i参与运算后,i的值再自减1。

在理解和使用上容易出错的是i++和i--。特别是当它们出在较复杂的表达式或语句中时,常常难于弄清,因此应仔细分析。

void main(){ int i=8;

printf(\\\"%d\\\\n\\\ printf(\\\"%d\\\\n\\\ printf(\\\"%d\\\\n\\\ printf(\\\"%d\\\\n\\\ printf(\\\"%d\\\\n\\\ printf(\\\"%d\\\\n\\\ } i<--8 i<--i+1 i<--i-1 i<--i+1 i<--i-1 i<--i+1

i<--i-1 int i=8;

printf(\\\"%d\\\\n\\\ printf(\\\"%d\\\\n\\\ printf(\\\"%d\\\\n\\\ printf(\\\"%d\\\\n\\\ printf(\\\"%d\\\\n\\\ printf(\\\"%d\\\\n\\\ i的初值为8

第2行i加1后输出故为9; 第3行减1后输出故为8;

第4行输出i为8之后再加1(为9); 第5行输出i为9之后再减1(为8); 第6行输出-8之后再加1(为9); 第7行输出-9之后再减1(为8) void main(){ int i=5,j=5,p,q; p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j);

printf(\\\"%d,%d,%d,%d\\\ }

i<--5,j<--5,p<--0,q<--0

i+i+i--->p,i+1-->i,i+1-->i,i+1-->i

j+1->j,j+1->j,j+1->j,j+j+j->q int i=5,j=5,p,q; p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j);

这个程序中,对p=(i++)+(i++)+(i++)应理解为三个i相加,故p值为15。然后i再自增1三次相当于加3故i的最后值为8。而对于q的值则不然,q=(++j)+(++j)+(++j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8。算术表达式表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一个值及其类型,它们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看作是表达式的特例。

二、单片机C语言常用关键字

以下是常用的关键字,是学好C语言的必备基础:

关键字 auto break case char const continue default do 用 途 存储种类说明 程序语句 程序语句 数据类型说明 存储类型说明 程序语句 程序语句 程序语句 说 明 用以说明局部变量,缺省值为此 退出最内层循环 Switch语句中的选择项 单字节整型数或字符型数据 在程序执行过程中不可更改的常量值 转向下一次循环 Switch语句中的失败选择项 构成do..while循环结构 double else enum extern flost for goto if int long register return short signed sizeof static struct swicth typedef union unsigned void volatile while 数据类型说明 程序语句 数据类型说明 存储种类说明 数据类型说明 程序语句 程序语句 程序语句 数据类型说明 数据类型说明 存储种类说明 程序语句 数据类型说明 数据类型说明 运算符 存储种类说明 数据类型说明 程序语句 数据类型说明 数据类型说明 数据类型说明 数据类型说明 数据类型说明 程序语句 双精度浮点数 构成if..else选择结构 枚举 在其他程序模块中说明了的全局变量 单精度浮点数 构成for循环结构 构成goto转移结构 构成if..else选择结构 基本整型数 长整型数 使用CPU内部寄存的变量 函数返回 短整型数 有符号数,二进制数据的最高位为符号位 计算表达式或数据类型的字节数 静态变量 结构类型数据 构成switch选择结构 重新进行数据类型定义 联合类型数据 无符号数数据 无类型数据 该变量在程序执行中可被隐含地改变 构成while和do..while循环结构 附表1-1 ANSIC标准关键字

关键字 bit sbit Sfr Sfr16 data bdata idata pdata xdata code interrupt reentrant using 用 途 位标量声明 位标量声明 特殊功能寄存器声明 特殊功能寄存器声明 存储器类型说明 存储器类型说明 存储器类型说明 存储器类型说明 存储器类型说明 存储器类型说明 中断函数说明 再入函数说明 寄存器组定义 说 明 声明一个位标量或位类型的函数 声明一个可位寻址变量 声明一个特殊功能寄存器 声明一个16位的特殊功能寄存器 直接寻址的内部数据存储器 可位寻址的内部数据存储器 间接寻址的内部数据存储器 分页寻址的外部数据存储器 外部数据存储器 程序存储器 定义一个中断函数 定义一个再入函数 定义芯片的工作寄存器

附录二 AT89C51特殊功能寄存器列表(适用于同一架构的芯片)

带*号的特殊功能寄存器都是可以位寻址的寄存器 符 号 *ACC *B *PSW SP DPL DPH *IE *IP *P0 *P1 *P2 *P3 PCON *SCON SBUF *TCON TMOD TL0 TL1 TH0 TH1 地 址 E0H F0H D0H 81H 82H 83H A8H D8H 80H 90H A0H B0H 87H 98H 99H 88H 89H 8AH 8BH 8CH 8DH

附录三 运算符优先级和结合性

级 别 1 类 别 强制转换、数组、 结构、联合 逻 字 增 减 辑 位 量 量 名 称 强制类型转换 下标 存取结构或联合成员 逻辑非 按位取反 加一 减一 取地址 取内容 单目减 长度计算 乘 除 取模 加 减 运算符 ( ) [ ] ->或. ! ~ ++ -- & * - sizeof * / % + - 结合性 右结合 注 释 累加器 乘法寄存器 程序状态字 堆栈指针 数据存储器指针低8位 数据存储器指针高8位 中断允许控制器 中断优先控制器 端口0 端口1 端口2 端口3 电源控制及波特率选择 串行口控制器 串行数据缓冲器 定时器控制 定时器方式选择 定时器0低8位 定时器1低8位 定时器0低8位 定时器1高8位 2 左结合 指 针 算 术 长度计算 3 4 算 术 算术和指针运算 右结合 5 字 位 6 关系 7 8 9 10 11 12 13 14 15 字 位 逻 辑 条 件 赋 值 逗 号 左移 右移 大于等于 大于 小于等于 小于 恒等于 不等于 按位与 按位异或 按位或 逻辑与 逻辑或 条件运算 赋值 复合赋值 逗号运算

<< >> >= > <= < == != & ^ | && || ?: = Op= , 左结合 右结合

因篇幅问题不能全部显示,请点此查看更多更全内容

Top