21.操作符优先级和结合性列表,复杂表达式求值顺序

news2024/9/19 9:49:03

目录

    • 一、复杂表达式求值顺序
        • 1.操作符的优先级
        • 2.操作符的结合性
        • 3.操作符是否控制执行的顺序
    • 二、求值顺序
    • 三、操作符优先级和结合性列表

一、复杂表达式求值顺序

复杂表达式的求值顺序由三个因素决定:
1.操作符的优先级
2.操作符的结合性
3.操作符是否控制执行的顺序

1.操作符的优先级

两个相邻的操作符哪个先执行取决于操作符的优先级 如果两者优先级相同,那么他们的执行顺序由结合性决定。(从左向右计算还是从右向左计算)。

需要注意的是,有4个操作符,可以对整个表达式的求值顺序施加控制,这4个操作符为 “,” “&&” “||” “?:”。

操作符优先级如末尾附表所示。它只是决定表达式的各个组成部分在求值过程中如何聚组。

2.操作符的结合性

操作符的结合性表示是从左向右求值还是从右向左求值。

3.操作符是否控制执行的顺序

是否控制执行顺序表示,保证某个子表达式能够在 另一个子表达式所有求值过程完成之前
进行求值。即保证某个子表达式先于另一个子表达式求值。或者完全跳过某个表达式,不对其进行求值。

操作符会对其操作数提出要求,要求其为左值或右值。
左值意味着一个位置,右值意味着一个值,所以,在可以使用右值的地方可以使用左值,但是需要使用左值的地方不能使用右值!
左值是可以出现在赋值符号“=”左边的东西。
右值是可以出现在赋值符号“=”右边的东西。

二、求值顺序

除了两个运算符共享一个运算对象的情况外,C语言不保证先对复杂表达式的哪一部分求值。

举例:

a =2+3*(5+8);

对*的左右侧两个子表达式,对谁先求值都是有可能的。

复杂表达式求值顺序举例:

a+b*c

*操作符的优先级高于+,编译器别无选择,只能先执行乘法运算。

a*b+c*d+e*f

如果仅由优先级决定,三个乘法运算将先于加法运算,但实际上并不一定是这样,第一个加法运算可以能先于第三个乘法运算,实际上只要保证每个乘法运算在它相邻的加法运算之前执行即可。
加法运算的结合性要求加法运算按照先左后右的顺序执行,但是它对表达式剩余部分的执行顺序并未加以限制。
对于上式,没有任何规则要求所有的乘法运算需要先执行。也没有规定这几个乘法运算之间谁先进行。
优先级规则在这里不起作用,优先级只对相邻操作符的执行顺序起作用。

三、操作符优先级和结合性列表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/343922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【代码随想录训练营】【Day12休息】【Day13】第五章|栈与队列|239. 滑动窗口最大值|347.前 K 个高频元素|总结

239.滑动窗口最大值 题目详细:LeetCode.239 看到滑动窗口,我立马想起了双指针,利用双指针可以非常清晰地理解解题思路: 定义一个变量 max_i 用于记录窗口中的最大值的索引每次窗口滑动后 如果出去的值是最大值,那么…

ChatGPT实火,这小东西牛在哪?

ChatGPT,真的火了啊! 相信许多朋友都听说过 ChatGPT铺天盖地的赞美,但并不清楚它是个啥。 体制内让ChatGPT写材料,广告行业让ChatGPT写策划案,媒体让ChatGPT写新闻稿,程序员让ChatGPT写代码甚至还带修BUG服…

三、常用样式讲解一

文章目录一、企业站点样式实战1.1 版心1.2 reset.css1.3 index.css(首页的样式)1.4 溢出1.5 元素类型1.6 元素类型的转换1.7 行内块元素的特殊情况:img标签的特殊性一、企业站点样式实战 1.1 版心 1.2 reset.css /* reset.css用作清除一些常…

行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码)

行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码) 目录 行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码) 1. 前言 2. 人体检测数据集说明 (1)人体检测数据集 (2&#…

什么是互联网舆情监测分析系统,TOOM舆情监测云服务有哪些内容?

舆情监测应用范围广泛,可以帮助企业了解品牌形象、产品口碑、市场竞争、消费者需求等信息,政府了解民意状况、政策反响、社会热点等信息,个人了解社会趋势、舆论氛围、公共事件等信息。同时,舆情监测分析也可以帮助相关决策者及时…

男生vs女生,谁更加适合做软件测试?

前言 随着互联网的飞速发展,软件测试行业同步兴盛起来,逐渐出现了人才的短缺,致使行业人员工资一涨再涨。 所以,越来越多的人也开始意识到软件测试行业的”高薪“属性,转身投入到相关的工作中来。 但是,…

【Spring Cloud】如何把Feign默认的HTTP客户端URLConnection更换成支持连接池的Apache HttpClient或OKHttp

本期目录前言1. Feign底层的客户端实现2. Feign性能优化思路3. 更换底层客户端1)引入依赖坐标2)配置连接池前言 本次示例代码的文件结构如下图所示。 1. Feign底层的客户端实现 Feign 发送 HTTP 请求时,底层会使用到别的客户端。下面列出…

微服务网关(四)tcp代理模块

微服务网关(四)tcp代理模块 tcp代理服务器的代理实现: 请求流程: 代理的启停方法 //并发执行 go func() {tcp_proxy_router.TcpServerRun() }()tcp_proxy_router.TcpServerStop()tcp_server 一次完整流程 tcp_server.go 首先…

JVM的垃圾回收机制

复制算法、Eden区和Survivor区 首先我们就来探索一下对于JVM堆内存中的新生代区域,是怎么进行垃圾回收的。 实际上JVM是把新生代分为三块区域的:1个Eden区,2个Survivor区。 其中Eden区占用80%的内存空间,每块Survivor各占用10%的内…

使用yolov5训练数据集笔记

准备工作 1. 安装labelimg labelimg:主要用于目标检测的目标框绘制,得到关于我们训练的边框位置、类别等数据 pip install labelimg2. 下载yolov5源码 我使用的是v7.0版本,直接下载即可,下载后解压出来 2.1 安装yolov5运行依赖包 进入…

SurfaceFlinger详解

SurfaceFlinger的定义 大多数应用在屏幕上一次显示三个层:屏幕顶部的状态栏、底部或侧面的导航栏以及应用界面。有些应用会拥有更多或更少的层(例如,默认主屏幕应用有一个单独的壁纸层,而全屏游戏可能会隐藏状态栏)。…

棱形打印--进阶2(Java)

棱形打印 问题 * *** ***** ******* ********* ******* ***** *** * * * …

centos上搭建nginx视频点播服务器(nginx+vod+lua http发送鉴权消息)

需求背景:想着搭建一个视频点播服务器,最后选择了nginxvod的方案,用lua脚本写拉流鉴权,但是环境搭建过程中又发现nginxvodlua的环境并不是很容易搭建,是nginxlua的环境,手动搭建比较麻烦,但还是…

Numpy基础与实例——人工智能基础

文章目录一、Numpy概述1、优势2、numpy历史3、Numpy的核心:多维数组4、内存中的ndarray对象4.1 元数据(metadata)4.2 实际数据二、numpy基础1、 ndarray数组2、 arange、zeros、ones、zeros_like3、ndarray对象属性的基本操作3.1 修改数组维度…

羊了个羊游戏开发教程1:堆叠牌的拾取

本文首发于微信公众号: 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。嗨!大家好,我是小蚂蚁。最近“羊了个羊”小游戏爆火。一下子让想做微信小游戏或者想学做微信小游戏的人多了很多&am…

Java Map集合

8 Map集合 HashMap: 元素按照键是无序,不重复,无索引,值不做要求 LinkedHashMap: 元素按照键是有序,不重复,无索引,值不做要求 8.1 Map集合概述和特点 Map集合是一种双列集合,每个元素包含两个…

【C++】 C C++ 内存管理

文章目录📕 C、C 内存分布📕 C 内存管理方式1. 操作内置类型2. 操作自定义类型📕 operator new 与 operator delete📕 定位 new📕 C、C 内存分布 C 和 C 的内存分布没什么区别,C 是基于 C 语言的&#xff…

腾讯xSRC[linux+docker]搭建教程

腾讯xSRC[linuxdocker]搭建教程 1.下载镜像 docker pull xsrc/xsrc:v1.0.12.启动镜像 1️⃣启动镜像 docker run -it -d --name xsrc_web -p 60080:80 -p 63306:3306 --privilegedtrue xsrc/xsrc:v1.0.1注意将3306端口映射到8806端口,以便于远程连接访问容器内数…

手写识别字体的步骤是什么?怎么识别图片中的文字?

手写识别字体的步骤是什么?怎么识别图片中的文字? 1. 打开信风工具网,点击拍照按钮,选择拍图识字模式,对准需要识别的文件进行拍摄。在线工具地址: https://ocr.bytedance.zj.cn/image/ImageT…

VScode 自定义主题颜色

vscode其实已经有很多完善且好看的主题了,但我总觉得每一个主题对我来说,都有那么一点点不够完美,比如亮色的主题,颜色就没有深色主题那么好看,对比度高。 好不容易看到一个好看的主题吧,又觉得某一部分的…