搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
2023面试高手
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
芋道源码 / yudao-cloud:前端技术架构探索与实践
2
RabbitMQ源码解析前奏--集群_[{nodes,[{disc,[rabbit@proxy2]},{ram,[rabbit@proxy
3
最新人工智能源码搭建部署教程/ChatGPT程序源码/AI系统/H5端+微信公众号版本源码_ai网站搭建
4
大型语言模型 (LLM) 的系统消息框架和模板建议_llm下的智能客服的系统架构
5
30节AMOS教程从入门到论文分析:验证性因子分析的求解_amos验证性因子分析
6
【mysql】—— 数据类型详解_mysql 数值类型
7
AGI|一文识别LangChain中ChatOpenAI 和OpenAI的区别_langchain chatopenai
8
04-PMP学习笔记-第四章《项目整合管理》_项目目标属于项目整合吗
9
GOPS现场 | 对话龙智董事长何明,探讨DevOps安全新概念
10
网络安全协议之IPsec
当前位置:
article
> 正文
C语言中运算符的优先级_复合运算符和算术运算符的优先级
作者:2023面试高手 | 2024-06-16 21:39:29
赞
踩
复合运算符和算术运算符的优先级
一、前言
优先级
:
C语言中,运算符的运算优先级共分为15
级。1
级最高,15
级最低。
在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符
优先级相同时,则按运算符的结合性所规定的结合方向处理。
结合性
:
C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式 x-y+z
则 y
应先与“-”号结合,执行 x-y
运算,然后再执行 +z
的运算。这种自左至右的结合
方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。最典型的右结合
性运算符是赋值运算符。如 x=y=z ,由于“=”的右结合性,应先执行 y=z
再执行 x=(y=z) 运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
二、说明
*
**
所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。
1、具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,[]与数组相关,而->及.是取结构成员。
2、其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的
真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。
3、另外在C语言里,没有前置后置之分,因为++
--
是右结合所以右侧优先运算,表现为
操作数后置优先级比较高
的假象,前置和后置的区分是因为运算符重载而后加入C++的
4、接下来是算术运算符,*、/、%的优先级当然比+、-高了。
5、移位运算符紧随其后。
6、其次的关系运算符中,<
<=
>
>=要比
==
!=高一个级别,不大好理解。
7、所有的逻辑操作符都具有不同的优先级(单目运算符除外,!和~)
1>逻辑位操作符的与比或高,而异或则在它们之间。
2>跟在其后的&&比||高。
8、接下来的是条件运算符,赋值运算符及逗号运算符。
9、在C语言中,只有4个运算符规定了运算方向,它们是&&、|
|、条件运算符及赋值运算符。
&&、|
|都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。
1>如
a
=
0
&&
b;
&&运算符的左边位0,则右边表达式b就不再判断。
2>在条件运算符中。如a?b:c;先判断a的值,再根据a的值对b或c之中的一个进行求值。
3>赋值表达式则规定先对右边的表达式求值,因此使
a
=
b
=
c
=
6;成为可能。
三、口诀注释
1、优先级等级口诀
圆方括号、箭头一句号,
自增自减非反负、针强地址长度,
乘除,加减,再移位,
小等大等、等等不等,
八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。
其中“,”号为一个等级分段。
2、优先级等级注释
“圆方括号、箭头一句号”指的是第15级的运算符。其中圆方括号很明显“()、[]”,箭头
指的是指向结构体成员运算符“->”,句号
指的是结构体成员运算符“.”
;
“自增自减非反负、针强地址长度”指的是第14级的运算符。其中
非
指的是逻辑运算符“!”,反
指的是按位取反运算符“~”,负
指的是负号运算符“-”,针
指的是指针运算符“*”,强
指的是强制类型转换运算符,地址
指的是地址运算符“&”,长度
指的是长度运算符“sizeof
”;
“乘除,加减,再移位”移位指的是左移运算符“<<”和右移运算符“>>”,其中除法还包括了
取余运算符“%”;
“小等大等、等等不等”
指的是第10级到第9级的运算符:<、<=、>和>=,等等指的是等于运算符==,不等指的是不等于运算符!=;
“ 八位与,七位异,六位或”其中
八位与
指的是第8级的
按位与
运算符“&”,七位异
指的是第7级的按位异或运算符“^”,六位或
指的是第6级的按位或运算符“|”;
“五与,四或”指的是第5级、第4级的逻辑与运算符“&&”和逻辑或运算符“||”;
“三疑,二赋,一真逗”指的是第3级到第1级的运算符。其中,三疑指的是条件运算符“?:”
(三有双重含义:即指优先级别是三,它的运算符类型也是三目,疑也取“?”之意),二赋
指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|=
,一真逗
指的是第1级的“,”运算符,真字只是为了语句需要罢了。
由于C语言的运算符优先级与C++的不完全一样(主要是增加了几个运算符),所以这个口诀不能完全实用于C++.但是应该能够兼容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先级的!
3、应用举例
1、赋值运算符:a=5;
a=b=0;
解释:第一个赋值语句把5赋给变量a;第二个赋值语句的意思是把0同时赋值给两个变量。这是因为赋值语句是从右向左运算的,也就是说从右端开始计算,先b=0,然后a=b。
2、复合赋值运算符:a=1;a+=3;
解释: 上面第二个赋值语句等价于a=a+3;即a=4。
3、算术运算符:Area=Height*Width;num=num1+num2/num3-num4;
第一个赋值语句Height和Width相乘结果赋给变量Area;第二个赋值语句先完成num2与num3的整除运算,然后与num1相加,再减去num4,结果赋给num。运算符运算顺序先算乘除再算加减。单目正和单目负最先运算。
4、逻辑运算符:a=1,b=1;
a||b-1;
解释:因为a=1为真值,所以不管b-1是不是真值,总的表达式一定为真值,这时后面的表达式就不会再计算了。
5、关系运算符:if(a>0)...
解释: 如果a>0,则执行if语句中的内容,否则退出。
6、条件运算符:a=(b>0)?b:-b;
解释:当b>0时,a=b;当b不大于0时,a=-b;其实上面的意思就是把b的绝对值赋值给a。
7、逗号运算符:b=2,c=7,d=5;
a=(++b,c--,d+3);
解释: 有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是d+3=8,所以a=8。
8、位逻辑运算符
包括:1。&位与符
2。|位或符
3。^位异或符
4。~位取反符
以操作数12为例:位运算符将数字12视为1100。位运算符将操作数视为位而不是数值。 数值可以是任意进制的:十进制、八进制或十六进制。 位运算符则将操作数转化为二进制,并相应地返回1或0。
位运算符将数字视为二进制值,并按位进行相应运算,运算完成后再重新转换为数字。例如:表达式10&15表示(1010
&
1111),它将返回表示1010的值10。因为真真得真,或者是11得1,同位全是1结果也是1
1>表达式10|15表示(1010
|
1111),它将返回表示1111的值15。假假得假。全零得零。
2>表达式10^15表示(1010
^
1111),
它将返回表示0101的值5。此时是同性相斥,相同的就为假。
3>表达式~10表示(~1010),它将返回表示0101的值
-11。此号好理解,按位取反。
本文内容由网友自发贡献,转载请注明出处:
https://www.wpsshop.cn/w/2023面试高手/article/detail/728362
推荐阅读
article
159:
vue
+
openlayers
地图上
添加
Echarts
环形图_超图实现图层上
添加
echart
...
本示例的目的是介绍演示如何在
vue
+
openlayers
中
添加
Echarts
的环形,借助于一个插件ol-
echart
s可...
赞
踩
article
java
实现
邮件
发送
_
java
实现
邮件
的
发送
...
java
实现
邮件
发送
_
java
实现
邮件
的
发送
java
实现
邮件
的
发送
1、
发送
简单
邮件
1...
赞
踩
article
Springboot
实现
定时
任务
的多种方式_
springboot
定时
任务
...
定时
任务
_
springboot
定时
任务
springboot
定时
任务
...
赞
踩
article
Hadoop
/
Hive
/
Spark
小
文件
处理_
spark
小
文件
问题...
小
文件
指的是
文件
size比HDFS的block size小很多的
文件
。
Hadoop
适合处理少量的大
文件
,而不是大量的小文...
赞
踩
article
leetcode
-14
最长
公共
前缀
(
LongestCommonPrefix
)-
java
_14
最长
公...
题目:
最长
公共
前缀
编写一个函数来查找字符串数组中的
最长
公共
前缀
。如果不存在
公共
前缀
,返回空字符串 ""。说明:所有输入只...
赞
踩
article
arm
linux
关闭
防火墙
,
linux
的
防火墙
及
arm
与
虚拟机
共享...
为实现宿主机上交叉编译后的应用程序能方便的下载到嵌入式开发板上运行,一般通过在开发板上采用网络挂载
虚拟机
nfs文件系统实...
赞
踩
article
C++
Leetcode387
:
字符
串
中的
第一个
唯一
字符
_
c++
中
字符
串
第一个
字符
...
题目给定一个
字符
串
,找到它的
第一个
不重复的
字符
,并返回它的索引。如果不存在,则返回 -1。案例:s = “leetcod...
赞
踩
article
数据
结构的终极
boss
:
AVL
树
的详细讲解及代码实现_1.实现
avl
树
模板
不
支持重复
数据
. 2.实现...
当根节点
不
平衡,平衡因子为2或-2时,分以下情况考虑1.平衡因子为2,说明右子
树
高,那么再来看根节点的右节点的平衡因子,...
赞
踩
article
spring
-data-
neo4j
了解...
本项目demo地址【请阅读readme文件】:https://gitee.com/LiuDaiHua/project-n...
赞
踩
article
ICLR
2022 杰出
论文
奖 - 获奖
论文
速览_efficiently modeling
long
...
目录杰出
论文
奖
论文
论文
1:Analytic-DPM: an Analytic Estimate of the Opti...
赞
踩
article
JDK
每个
版本
的
新特性_
jdk
每个
版本
的
特性...
JDK
1.51. 自动拆箱,自动装箱: 装箱 就是自动将基本数据类型转换为包装器类型 拆箱 就是自动将包装器类型转换为基...
赞
踩
article
常见
排序
算法
...
然后让左边找到的值与右边找到的值交换位置,如果不大于key的值或者不小于key的值左边继续往右走右边继续往左走。当beg...
赞
踩
article
Hive
教程(09)- 彻底解决
小
文件
的问题_
hive
小
文件
处理
方案
...
文章目录01 引言02
小
文件
概述2.1
小
文件
的缘由2.1
小
文件
的危害03
小
文件
解决
方案
3.1 方式一:处理已有的...
赞
踩
article
YoloV3
darknet
系列 |
训练
自己的VOC
数据
集_
yolov3
训练
voc
数据
集...
YoloV3
darknet
系列 |
训练
自己的VOC
数据
集,由于项目需要所以需要使用
darknet
yoloV3
训练
...
赞
踩
article
python
导入
自己
写
的
包
_
python
中
模块
和
包
的
零基础学习...
一、
模块
、
包
1.
模块
:一个
包
含所有你定义
的
函数和变量
的
文件,其后缀名是 .py ,一个.py文件就是一个
模块
模块
实质上就...
赞
踩
article
LeetCode
第十四题
:
最长
公共
前缀
(
java
)_
最长
公共
前缀
java
...
题目:
最长
公共
前缀
编写一个函数来查找字符串数组中的
最长
公共
前缀
。如果不存在
公共
前缀
,返回空字符串 ""。示例
:
输入
:
st...
赞
踩
article
从零开始
:
Flutter
应用
上架
iOS
的完整流程解析_
flutter
发布
ios
...
Flutter
应用
上架
iOS
需要一些基本的知识和技能,包括对
Flutter
和Xcode的使用,以及熟悉
iOS
应用
程序构建...
赞
踩
article
.
NET
PPT
控件
Spire
.
Presentation
for
.
NET
V2.8发布 | 附...
2019独角兽企业重金招聘Python工程师标准>>> ..._spire.presentati...
赞
踩
article
亮
数据
——
让
你的
IP
走出去,
让
价值
返回来_
亮
数据
浏览器
试用教程...
基于网络大
数据
的·深度出境电商选品情报洞察_
亮
数据
浏览器
试用教程
亮
数据
浏览器
试用教程 ...
赞
踩
article
Spire
.
Presentation
for
Java
/NET...
Spire
.
Presentation
for
Java
是一个专业的 PowerPoint API,180846090使开...
赞
踩
相关标签
openlayers
openlayers示例
openlayers多边形
echarts
java
学习
笔记
spring boot
后端
hadoop
hive
spark
leetcode
arm linux 关闭防火墙
数据结构
算法
开发语言
json
前端
数据库
ViewUI
顶会论文
ICLR 2022
排序算法