计算含多种运算符的表达式

  • 引入
  • 运算符的优先级
  • 算术表达式的运算规则
  • 引例
  • 例题

引入

诸如下面这些表达式,它的计算过程,计算顺序是怎样的?计算结果为多少?
今天我们就一起来解决一下这个问题吧!

运算符的优先级

解决这个问题,首先我们必须要了解清楚各种运算符的优先级。
首先,可以简单记,!!>算术运算符>关系运算符>&&>||>赋值运算符
再详细一点记的话,可以根据下面的口诀来记忆。

括号成员第一; //括号运算符[](),成员运算符. ->
全体单目第二;//++ ,–,+(正),-(负),指针运算符*、&
乘除余三,加减四// 余即%取余运算符
位移五,关系六//位移运算符<< >>,关系运算符>,<,≥,≤
等于(与)不等排第七// == 和! !=
位与异或和位或,三分天下,八九十//位与 &第八,异或^第九,位或|第十
逻辑或跟与,十二和十一//逻辑 或||十二,逻辑与&&十一
条件高于赋值//三目运算符优先级排到13位只比赋值运算符和逗号运算符高
逗号运算级最低//,运算级最低

更详细的可以看下面这张表(图片来源于)

算术表达式的运算规则

算术表达式的运算遵循运算符优先级和结合性的原则。

表达式运算的具体过程是:对表达式自左向右扫描运算对象,然后考察运算对象两侧的运算符,如果运算对象两侧的运算符优先级不相同则该运算对象和优先级的运算符结合;如果运算对象两侧的运算符优先级相同时,则按照运算符的结合性原则去结合,如果运算符是左结合的,则和左侧的运算符结合,如果是右结合的,则和右侧的运算符结合。当某运算符所需的运算对象全部都和该运算符结合后进行运算,运算后的中间结果就是下一个被扫描到的运算对象,当某运算符所需的运算对象没有全部结合则继续扫描下一个运算对象。

引例

了解了上面运算符的优先级之后,我们来举个例子说明一下。

int a=3,b=1;

则下述表达式的值为:

分析
表达式a+b*5/6的具体运算过程是:
①对该表达式自左向右扫描,扫描到的第1个运算对象是变量a,其左侧无运算符,右侧是运算符,于是a必须和+结合,而加法运算是双目运算,无法进行运算,于是继续扫描下一个运算对象;
②扫描到的第2个运算对象是变量b,其左侧+运算符,右侧是运算符*,优先级高于+,于是b必须和*结合,而乘法运算是双目运算,无法进行运算,于是继续扫描下一个运算对象;
③扫描到的第3个运算对象是常量5,其左侧是*运算符,右侧是运算符/,优先级相同且是左结合的,于是5必须和*结合,乘法运算的双目都已经和*结合,于是完成b*5乘法运算,得到中间结果为5
中间结果5就是要扫描的第4个运算对象,其左侧运算符+,右侧是运算符/,的优先级于+,于是5必须和/结合,而除法运算是双目运算,无法进行运算,于是继续扫描下一个运算对象;
⑤扫描到的第5个运算对象是常量6,其左侧运算符/,右侧无运算符,于是6必须和/结合,除法运算的双目都已经和/结合,于是完成5/6除法运算,得到中间结果0
中间结果0就是要扫描的第6个运算对象,其左侧运算符+,右侧无运算符,于是0必须和结合,加法运算的双目都已经和+结合,于是完成a+0加法运算,得到结果为3,运算结束,得到表达式的结果为值3。
图解如下:


(上方的序号是运算过程,下方的序号为运算对象的排序)

例题

(一)

int x=3,y=4,z=5;

计算下表达式的值

分析过程如例题所示。

最终结果为1。
(二)

int x=3,y=4,z=5;

计算下述表达式的值

分析过程如下:

int a=3,b=2,c=1,f;

计算下表达式的值:

f=a>b>c;

分析过程如下:

这个表达式含关系运算,关系运算的结果分为成立或者不成立,用逻辑量"0"和"1"表示。
关系运算符是左结合运算符。
故表达式的值为0;
(三)

int m=2,n=1,a=1,b=2,c=3;


则执行完上面这个表达式之后,n的值为 ? m的值为?
分析过程如下:

故执行完上述的过程之后,n的值为0,m的值为1。
(四)

int m=5,y=2;

则计算表达式

y+=y-=m*=y

这个表达式中含复合的算术赋值运算符
什么是复合的算术赋值运算符呢?
就是在赋值运算符"="前加上其他的运算符,从而构成复合的赋值运算符。
C语言提供了5种复合的算术赋值运算符,分别是+===*=/=%=,复合的算术运算符是双目运算符,优先级和赋值运算符相同,也是右结合性的。

这个表达式的分析过程如下:

故y的值为-16。

【C语言】计算含多种运算符的表达式相关推荐

  1. c语言的运算符分类ppt,c语言的数据类型、运算符与表达式.ppt

    c语言的数据类型.运算符与表达式.ppt 第3章数据类型.运算符与表达式,预备知识 数据类型 常量与变量 不同类型数据间的转换 运算符和表达式3.0 预备知识 计算机中数的表示及进制转换 数码.基与权 ...

  2. c++ long 转 short_C精品编程之——C语言的数据类型、运算符、表达式,精品课程...

    在前边的文章分享中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用.对变量的说明可以包括三个方面: ·数据类型 ·存储类型 ·作用域 在本课中,我们只介绍数据类型说明.其它说明在以 ...

  3. 51单片机c语言除法符号,单片机c语言教程:C51运算符和表达式

    上两课说了常量和变量,先来补充一个用以重新定义数据类型的的语句吧.这个语句就是 typedef,这是个很好用的语句,但我却不常用它,通常我定义变量的数据类型时都是使 用标准的关键字,这样别人能很方便的 ...

  4. c语言表达式的类型,C语言_类型、运算符与表达式

    类型.运算符与表达式 变量和常量是C语言中的基本数据对象. 1.变量与变量名 局部变量:较短的变量名 外部变量:较长的变量名 变量名使用小写字母,符号常量名使用大写字母. 2.数据类型与长度 字符型 ...

  5. c51单片机c语言取反运算符,单片机c语言教程:C51运算符和表达式

    在制作电路前我们先来看看要用的 MAX232,这里不去具体讨论它,只要知道它是 TTL和 RS232 电平相互转换的芯片和基本的引脚接线功能就行了.通常我会用两个小功率晶体管加少量的电路去替换MAX2 ...

  6. IOT嵌入式物联网----运算符,表达式和语句

    系列文章目录 零 ---- 千里之行,始于足下 壹 ---- 嵌入式C语言编程 一.运算符.表达式和语句的概念         运算符是一种告诉编译器执行特定的数学或逻辑操作 的符号, C 语言内置了 ...

  7. c语言等号运算符先计算右边,C语言运算符和表达式.ppt

    <C语言运算符和表达式.ppt>由会员分享,可在线阅读,更多相关<C语言运算符和表达式.ppt(29页珍藏版)>请在人人文库网上搜索. 1.运算符和表达式,夏涛,运算符与表达式 ...

  8. c语言程序计算p q真值表,C语言程序设计第2章数据类型﹒运算符和表达式.ppt

    C语言程序设计第2章数据类型﹒运算符和表达式 教学目标 掌握C语言标识符的组成 理解C语言的基本数据类型 掌握变量定义的方法 掌握常用的运算符的使用 掌握混合运算的数据转换方法 2.1 C语言的数据类 ...

  9. C语言(第二章):数据类型、运算符、表达式

    .:.:第二章:数据类型.运算符.表达式:.:. 第二章: 数据类型.运算符.表达式 C语言的数据类型 在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用.对变量的说明可以 ...

最新文章

  1. 设计模式--模板方法模式
  2. SQL Server中利用存储过程来高性能地进行分页
  3. 最新的推荐系统论文两篇
  4. halcon2D Metrology测量算子,卡尺测量算子,持续更新
  5. Redis --数据类型 [1]
  6. 支付宝双接口ILLEGAL_EXTERFACE错误问题
  7. 电磁波传播相位是否会变化_电磁波相位关系释疑
  8. 苹果se2_苹果12mini登场后SE2彻底沦为智商检测机?网友:太高明
  9. 螺旋数组,之字形数组
  10. MooseFs的使用与操作
  11. 第二届ATI获奖自动化测试工具介绍
  12. 华南金牌x79支持服务器内存吗,迟来的评测:华南 金牌X79 主板,值不值得买?...
  13. Kolmogorov复杂性 简介
  14. java游戏繁体字名字_繁体字游戏名(精选500个)_繁体字游戏名字大全_繁体字游戏网名...
  15. 数胎动可辨别宝宝是不是缺氧
  16. 计算机主机启动 显示器不动什么原因,主机开了电脑屏幕不亮怎么回事?电脑开机后显示器不亮的解决方案...
  17. Unity C# 批量处理 命名空间 修改
  18. 未来计算机发展图片,IT发展速度非常惊人!展望未来电脑发展模样
  19. 矢量叉乘能否反求矢量
  20. 怀仁在2021年高考云东成绩查询,2020年怀仁市云东中学高考喜报

热门文章

  1. 员工人事档案组成要素介绍
  2. MySQL批量修改数据
  3. Basic English : Speaking
  4. 放大电路静态分析——直流通路和交流通路;静态分析估算法、图解法
  5. ILRuntime来实现热更新的优与劣!
  6. 4月Intel平台超值推荐及评测
  7. 滑坡监测系统详细解决方案
  8. JavaScript如何实现加法?
  9. hdu 1067 Gap
  10. 【元宇宙系列】初识元宇宙(Mateverse)