操作符的属性:优先级、结合性(缺表达式求值)

简介: 操作符的属性:优先级、结合性(缺表达式求值)

C语言的操作符有2个重要的属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。

我们先简单了解一下操作符的优先级和结合性,附上表格,简单记一下顺序,搭配几道题来加深印象。

1.优先级

       优先级指的是,如果一个表达式包含多个运算符,哪个运算符应该优先执行。各种运算符的优先级是不⼀样的。

3 + 4 * 5;

       上面示例中,表达式 3 + 4 * 5 里面既有加法运算符( + ),又有乘法运算符( * )。由于乘法的优先级高于加法,所以会先计算 4 * 5 ,而不是先计算 3 + 4 。

2. 结合性

       如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符是左结合,还是右结合,决定执行顺序。大部分运算符是左结合(从左到右执行),少数运算符是右结合(从右到左执行),比如赋值运算符( = )。

5 * 6 / 2; 1

上面示例中, * 和 / 的优先级相同,它们都是左结合运算符,所以从左到右执行,先计算 5 * 6 ,

再计算 6 / 2 。

3.表格

运算符的优先级顺序很多,下面是部分运算符的优先级顺序(按照优先级从高到低排列),建议大概记住这些操作符的优先级就行,其他操作符在使用的时候查看下面表格就可以了。

• 圆括号( () )

• 自增运算符( ++ ),自减运算符( -- )

• 单目运算符( + 和 - )//正负号

• 乘法( * ),除法( / )

• 加法( + ),减法( - )

• 关系运算符( < 、 > 等)

• 赋值运算符( = )

由于圆括号的优先级最高,可以使用它改变其他运算符的优先级。

表格来源于c++官网,参考:https://zh.cppreference.com/w/c/language/operator_precedence

练习1. 求下面代码的结果 :

#include <stdio.h>
int main()
{
  int a, b, c;
  a = 5;
  c = ++a;
  b = ++c, c++, ++a, a++;//逗号表达式+赋值表达式
  b += a++ + c;
  printf("a = %d b = %d c = %d\n:", a, b, c);
  return 0;
}

答案:a = 9 b= 23 c = 8

答案解析:

++运算符:分为前置++和后置++

  • 前置++:先加1,后使用,即先使用变量中内容,然后给结果加1
  • 后置++:先使用变量中内容,整个表达式结束时,给变量加1

逗号表达式,取最后一个表达式的值。(逗号表达式:https://blog.csdn.net/wait___wait/article/details/135331063

#include <stdio.h>
int main()
{
  int a, b, c;
  a = 5;
  c = ++a;// ++a:加给a+1,结果为6,用完加之后的结果给c赋值,因此:a = 6  c = 6
  b = ++c, c++, ++a, a++;
   // 逗号表达式的优先级,最低,这里先算b=++c, b得到的是++c后的结果,b是7
   // b=++c 和后边的构成逗号表达式,依次从左向右计算的。
   // 表达式结束时,c++和,++a,a++会给a+2,给c加1,此时c:8,a:8,b:7
  b += a++ + c; // a先和c加,结果为16,在加上b的值7,b的结果为23,最后给a加1,a的值为9
  printf("a = %d b = %d c = %d\n:", a, b, c); // a:9, b:23, c:8
  return 0;
}

练习2. 关于表达式求值说法不正确是:(D )

因为有了优先级和结合性,表达式也有可能有不同的计算路径,导致计算结果的差异,例子在下面这个链接里面。

(表达式求值:https://blog.csdn.net/wait___wait/article/details/136159633


只有一点小小归纳,希望能帮到大家!

如果大家发现知识点错误的话,请帮忙指出,十分感谢!!

也请大家帮忙点赞、评论,这将督促我前行,大家一起加油!!!


目录
相关文章
|
安全 Linux Shell
Linux用户管理指南:创建、删除、权限、最佳实践,全面掌握用户管理技巧
Linux用户管理指南:创建、删除、权限、最佳实践,全面掌握用户管理技巧
2654 0
|
8月前
|
SQL 关系型数据库 MySQL
阿里云RDS云数据库优势有哪些?有必要购买阿里云RDS吗?
阿里云RDS提供稳定、安全、弹性的一站式托管数据库服务,支持MySQL、SQL Server等主流引擎,具备高可用、自动备份、智能优化等核心优势,大幅降低运维成本,助力企业聚焦业务创新。
811 1
|
9月前
|
监控 算法 5G
室内外融合定位技术从核心架构、技术原理到部署实施流程等详解(二)
本文详解室内外融合定位系统核心技术,涵盖北斗RTK厘米级定位、UWB高精度测距、场景自适应切换与多源数据融合四大模块。通过终端-网络-平台三层架构,实现室外高精度、室内无缝衔接的连续定位,支持化工、矿山等高危场景下的精准管控与安防联动,解决“进车间失联”难题。如果您想进一步了解室内外融合定位技术的案例,欢迎搜索维构lbs智能定位~
|
人工智能 API C++
【AI绘画大比拼】通义万相VS文心一格:探索十种风格下的绘画生成差异!
近日,通义大模型家族的新成员——通义万相已在人工智能大会上亮相。其中,通义万相的强大的“文生图”功能,不禁让我想到了去年八月由百度依托飞桨、文心大模型的技术创新推出的“AI作画”首款产品——文心一格。 那么,在类似的Prompt下,两款产品的表现将会如何呢?今天就让我们就十种风格下二者生成图像的表现力,来看看这两款产品的差异。
|
7月前
|
网络安全 数据安全/隐私保护
Socks5连接失败?多半是防火墙在“搞事”
Socks5代理常因防火墙拦截而连接失败——主因是其工作在会话层、依赖非标端口(如1080),易被端口封禁、协议识别或白名单限制。本文通俗解析三大限制,并提供更换端口、SOCKS5 over TLS加密、HTTP隧道封装及企业白名单适配等4种实用解决方案。
|
传感器 算法 安全
机器人路径规划和避障算法matlab仿真,分别对比贪婪搜索,最安全距离,RPM以及RRT四种算法
本程序基于MATLAB 2022A实现机器人路径规划与避障仿真,对比贪婪搜索、最安全距离、RPM和RRT四种算法。通过地图模拟环境,输出各算法的路径规划结果,展示其在避障性能与路径优化方面的差异。代码包含核心路径搜索逻辑,并附有测试运行图示,适用于机器人路径规划研究与教学演示。
1251 64
|
人工智能 自然语言处理 IDE
通义灵码使用体验
通义灵码2.0是阿里云推出的AI编码助手升级版,安装简便且兼容主流IDE。其行级和函数级实时续写功能准确,大幅减少编码时间。特色自然语言生成代码、单元测试及注释生成功能实用,提升代码质量和维护性。智能问答和异常排查功能出色,显著提高编程效率与代码稳定性,值得推荐。
936 0
|
存储 分布式计算 算法
大数据中一致性检查
【10月更文挑战第20天】
1416 2
|
存储 安全 数据管理
磁盘分区全解:快速搞定硬盘分区
本文介绍了磁盘分区的重要性和好处,如数据管理、性能提升和安全增强,并为初学者提供了Windows系统下的磁盘分区指南。文章提到了三种磁盘分区工具:磁盘管理器、Diskpart命令行工具和第三方软件DiskGenius。同时,详细阐述了如何在磁盘管理器中创建新分区、使用DiskGenius一键重新分区、拆分现有分区以及通过Diskpart命令创建分区的步骤。最后,文章强调了磁盘分区在数据管理和系统优化中的价值。
|
缓存 前端开发 算法
浅谈【JavaScript】的浏览器指纹?
浅谈【JavaScript】的浏览器指纹?
452 0

热门文章

最新文章