C 语言运算符优先级
C 语言运算符优先级
优先级 | 运算符 | 描述 | 结合性 |
---|---|---|---|
1 |
++ --
|
后缀自增与自减 | 从左到右 |
()
|
函数调用 | ||
[]
|
数组下标 | ||
.
|
结构体与联合体成员访问 | ||
->
|
结构体与联合体成员通过指针访问 | ||
(type){list}
|
复合字面量(C99) | ||
2 |
++ --
|
前缀自增与自减 | 从右到左 |
+ -
|
一元加与减 | ||
! ~
|
逻辑非、逐位取反 | ||
(type)
|
类型转换 | ||
*
|
解引用 | ||
&
|
取地址 | ||
sizeof
|
取大小 | ||
_Alignof
|
对其要求(C11) | ||
3 |
* / %
|
乘法、除法、求余 | 从左到右 |
4 |
+ -
|
加法、减法 | |
5 |
<< >>
|
左移、右移 | |
6 |
< <=
|
小于、小于等于 | |
> >=
|
大于、大于等于 | ||
7 |
== !=
|
等于、不等于 | |
8 |
&
|
逐位与 | |
9 |
^
|
逐位异或 | |
10 |
|
|
逐位或 | |
11 |
&&
|
逻辑与 | |
12 |
||
|
逻辑或 | |
13 |
? :
|
三元条件 | 从右到左 |
14 |
=
|
简单赋值 | |
+= -=
|
以和赋值、以差赋值 | ||
*= /= %=
|
以积、商及余数赋值 | ||
<<= >>=
|
以逐位左移及右移赋值 | ||
&= ^= |=
|
以逐位与、异或及或赋值 | ||
15 |
,
|
逗号 | 从左到右 |
如何理解优先级
分析表达式时,操作数首先与较高优先级的运算符结合(如同用括号)。例如,表达式 *p++
,因为后缀自增++
比解引用*
的优先级高,所以p
先和++
结合,所以被分析为 *(p++)
,而非 (*p)++
。
如何理解结合性
当运算符具有相同优先级时,操作数按照结合性来结合。例如表达式 a = b = c
,b 的两侧都是=
,优先级相同,但是=
的结合性是从右到左,即右边的优先,所以 b 优先与右边的=
结合,所以被分析为 a = (b = c)
而非(a = b) = c
。
几点注意
- 优先级或者结合性与求值顺序是独立的。
例如:表达式 f1() + f2() + f3()
被分析成 (f1() + f2()) + f3()
,因为 +
的结合性从左到右。但运行时对 f3
的函数调用可以最先、最后,或在 f1()
与 f2()
之间求值,同理, f1()
与 f2()
各自的求值顺序也不一定。
C 语言标准不指定运算符优先级。它指定语言文法,而优先级表格从它导出,以简化理解。
结合性规定对于一元运算符是冗余的,且只为完备而显示:一元前缀运算符始终从右到左结合(例如
++*p
为++(*p)
);而一元后缀运算符始终从左到右结合( 例如a[1][2]++
为((a[1])[2])++
)。结合性对成员访问运算符有意义:
a.b++
分析为(a.b)++
而非a.(b++)
。sizeof
的操作数不能是类型转型:表达式sizeof (int) * p
无歧义地转译成(sizeof(int)) * p
,而非sizeof((int)*p)
。条件运算符中部(
?
与:
之间)的表达式分析为如同加括号:忽略其相对于?:
的优先级。
参考资料
https://zh.cppreference.com/w/c/language/operator_precedence
C 语言运算符优先级相关推荐
- 关于C语言运算符优先级的记忆技巧是什么?
关于C语言运算符优先级的记忆技巧是什么? (1)先(括号)内层,后(括号)外层. (2)先函数,后运算. (3)先算术,后关系,再逻辑. (4)先乘除,后加减. (5)先左,后右. (6)搞不清,加括 ...
- new是不是c语言运算符优先级表,C语言运算符优先级列表(超详细)
<C语言运算符优先级列表(超详细)>由会员分享,可在线阅读,更多相关<C语言运算符优先级列表(超详细)(7页珍藏版)>请在人人文库网上搜索. 1.本篇文章是对C语言中运算符的优 ...
- C语言运算符优先级列表
本篇文章是对C语言中运算符的优先级进行了详细的分析介绍,需要的朋友参考下 每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家,欢迎拍砖! ...
- C语言运算符优先级和结合性
C语言运算符优先级和结合性 优先级 运算符 含义 使用形式 结合性 操作数 1 [ ] 数组下标 数组名[整型表达式] 左结合性 ( ) 圆括号 (表达式) . 成员选择(对象) 对象.成员名 -&g ...
- c语言运算符优先级结合,C语言运算符优先级及结合性
今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () ...
- C语言运算符优先级及结合性
今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () ...
- c语言运算符优先级 从右到左,c语言运算符优先级,结合性(左/右结合详解)
重新翻了遍c语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题. 什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的? 本文将围绕这几个问题 ...
- C语言运算符优先级 复习小妙招欸嘿
C语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) ...
- c语言的运算符优先级文档下载,c语言运算符优先级
c语言运算符优先级Tag内容描述: 1.运算符的优先级与结合律(从高到低排列)=优先级 名称 符号 结合性 1 数组下标 左结合性 1 函数调用 () 左结合性 1 结构和联合的成员. - 左结合性 ...
最新文章
- js ~取非运算符的妙用,将-1转为0(或假值)
- windows监控——再见zmq
- java·环境变量、基本数据类型
- 安卓首页图片轮播效果(淘宝、京东首页广告效果)
- 西亚斯vs2010敏捷开发分享
- 从零入门 Serverless | 架构的演进
- hadoop 2.x HA 出现ssh不能解析问题记录。
- Java反射机制:表单数据自动封装到JavaBean中【IT】
- java 清屏函数_c++清屏函数是什么
- rt-thread驱动篇(07)---STM32F429单片机SD卡驱动添加
- 老路MBA商学课|第002课:比较优势|我做的比你好,就应该我做吗?
- CCD传感器成像、尺寸、曝光时间
- HBuilderX真机模拟uni-app项目 + 上架应用市场
- opencv实现眼动检测【胡子哥哥】
- php显示动态的文字,动态文字制作软件,视频上制作动感文字/动态字幕条
- CSDN博客个人主页左侧栏添加微信二维码
- VMware Fusion 12.2.1 SLIC 2.6 MOD
- 如何用Python快速实现一个垃圾分类APP【附带微信小程序】
- GStreamer1.0 工具用法
- 前端click事件及自定义事件
热门文章
- 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)
- 频繁项集挖掘之Aprior和FPGrowth算法
- String,StringBuffer,StringBuilder区别
- 批量操作WinRAR实用技巧七招
- c++学习笔记之析构函数
- 机器学习导论(张志华):正定核应用
- 【转】C++读写.mat文件的方法
- [转]FFT倒序算法—雷德算法
- caffe中solver.prototxt文件参数解释
- Matlab循环读取txt文件并对其中数据进行计算最后导出为excel