找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11316|回复: 8
收起左侧

初学者单片机C语言运算符

  [复制链接]
ID:277999 发表于 2018-1-24 09:42 | 显示全部楼层 |阅读模式
单片机C语言运算符
单片机及C语言学习
auto        存储种类说明        用以说明局部变量,缺省值为此

break        程序语句        退出最内层循环

case        程序语句        Switch语句中的选择项

char        数据类型说明        单字节整型数或字符型数据

const        存储类型说明        在程序执行过程中不可更改的常量值

continue        程序语句        转向下一次循环

default        程序语句        Switch语句中的失败选择项

do        程序语句        构成do..while循环结构

double        数据类型说明        双精度浮点数

else        程序语句        构成if..else选择结构

enum        数据类型说明        枚举

extern        存储种类说明        在其他程序模块中说明了的全局变量

flost        数据类型说明        单精度浮点数

for        程序语句        构成for循环结构

goto        程序语句        构成goto转移结构

if        程序语句        构成if..else选择结构

int        数据类型说明        基本整型数

long        数据类型说明        长整型数

register        存储种类说明        使用CPU内部寄存的变量

return        程序语句        函数返回

short        数据类型说明        短整型数

signed        数据类型说明        有符号数,二进制数据的最高位为符号位

sizeof        运算符        计算表达式或数据类型的字节数

static        存储种类说明        静态变量

struct        数据类型说明        结构类型数据

swicth        程序语句        构成switch选择结构

typedef        数据类型说明        重新进行数据类型定义

union        数据类型说明        联合类型数据

unsigned        数据类型说明        无符号数数据

void        数据类型说明        无类型数据

volatile        数据类型说明        该变量在程序执行中可被隐含地改变

while        程序语句        构成while和do..while循环结构

附表1-1 ANSIC标准关键字



关键字        用 途        说 明

bit        位标量声明        声明一个位标量或位类型的函数

sbit        位标量声明        声明一个可位寻址变量

Sfr        特殊功能寄存器声明        声明一个特殊功能寄存器

Sfr16        特殊功能寄存器声明        声明一个16位的特殊功能寄存器

data        存储器类型说明        直接寻址的内部数据存储器

bdata        存储器类型说明        可位寻址的内部数据存储器

idata        存储器类型说明        间接寻址的内部数据存储器

pdata        存储器类型说明        分页寻址的外部数据存储器

xdata        存储器类型说明        外部数据存储器

code        存储器类型说明        程序存储器

interrupt        中断函数说明        定义一个中断函数

reentrant        再入函数说明        定义一个再入函数

using        寄存器组定义        定义芯片的工作寄存器



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

带*号的特殊功能寄存器都是可以位寻址的寄存器

符 号        地 址        注 释

*ACC        E0H        累加器

*B        F0H        乘法寄存器

*PSW        D0H        程序状态字

SP        81H        堆栈指针

DPL        82H        数据存储器指针低8位

DPH        83H        数据存储器指针高8位

*IE        A8H        中断允许控制器

*IP        D8H        中断优先控制器

*P0        80H        端口0

*P1        90H        端口1

*P2        A0H        端口2

*P3        B0H        端口3

PCON        87H



电源控制及波特率选择

*SCON        98H        串行口控制器

SBUF        99H        串行数据缓冲器

*TCON        88H        定时器控制

TMOD        89H        定时器方式选择

TL0        8AH        定时器0低8位

TL1        8BH        定时器1低8位

TH0        8CH        定时器0低8位

TH1        8DH        定时器1高8位

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

级 别        类 别        名 称        运算符        结合性

1        强制转换、数组、

结构、联合        强制类型转换        ( )        右结合

下标        [ ]

存取结构或联合成员        ->或.

2        逻 辑        逻辑非        !        左结合

字 位        按位取反        ~

增 量        加一        ++

减 量        减一        --

指 针        取地址        &

取内容        *

算 术        单目减        -

长度计算        长度计算        sizeof

3        算 术        乘        *        右结合

除        /

取模        %

4        算术和指针运算        加        +

减        -

5        字 位        左移        <<

右移        >>

6        关系        大于等于        >=

大于        >

小于等于        <=

小于        <

7        恒等于        ==

不等于        !=

8        字 位        按位与        &

9        按位异或        ^

10        按位或        |

11        逻 辑        逻辑与        &&        左结合

12        逻辑或        ||

13        条 件        条件运算        ?:

14        赋 值        赋值        =

复合赋值        Op=

15        逗 号        逗号运算        ,        右结合

1.算术运算符

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

  2.关系运算符

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

  3.逻辑运算符

  用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

  4.位操作运算符

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

  5.赋值运算符

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

  6.条件运算符

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

  7.逗号运算符

  用于把若干表达式组合成一个表达式(,)。

  8.指针运算符

  用于取内容(*)和取地址(&)二种运算。

  9.求字节数运算符

  用于计算数据类型所占的字节数(sizeof)。

  10.特殊运算符

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

  优先级和结合性

  c语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。 c语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再



执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。 c语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

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

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

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

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

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

  void main(){

  printf(\"\\n\\n%d,%d\\n\",20/7,-20/7);

  printf(\"%f,%f\\n\",20.0/7,-20.0/7);

  }

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

  printf(\"%f,%f\\n\",20.0/7,-20.0/7);

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

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

  void main(){

  printf(\"%d\\n\",100%3);

  }

  双目运算,具有左结合性。求余运算符%要求参与运算的量均为整型。本例输出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\",++i);

  printf(\"%d\\n\",--i);

  printf(\"%d\\n\",i++);

  printf(\"%d\\n\",i--);

  printf(\"%d\\n\",-i++);

  printf(\"%d\\n\",-i--);

  } 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\",++i);

  printf(\"%d\\n\",--i);

  printf(\"%d\\n\",i++);

  printf(\"%d\\n\",i--);

  pri



ntf(\"%d\\n\",-i++);

  printf(\"%d\\n\",-i--);

  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\",p,q,i,j);

  }

  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。算术表达式表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一个值及其类型,它们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看作是表达式的特例。

评分

参与人数 3黑币 +59 收起 理由
morrisliao + 5 很给力!
旋风sv + 4 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:266802 发表于 2018-1-25 06:29 来自手机 | 显示全部楼层
不错,收藏了
回复

使用道具 举报

ID:279740 发表于 2018-1-26 19:56 来自手机 | 显示全部楼层
我收藏了,。。
回复

使用道具 举报

ID:279640 发表于 2018-1-26 19:59 | 显示全部楼层
挺不错的。;学习了!!
回复

使用道具 举报

ID:145935 发表于 2018-1-27 16:59 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:279878 发表于 2018-1-28 21:46 | 显示全部楼层
不错 收藏了 很有帮助
回复

使用道具 举报

ID:266802 发表于 2018-1-31 06:57 来自手机 | 显示全部楼层
bc不错不错
回复

使用道具 举报

ID:260785 发表于 2018-1-31 08:30 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:272625 发表于 2018-2-5 21:41 来自手机 | 显示全部楼层
不错,小白收了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表