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

几点注意

  1. 优先级或者结合性与求值顺序是独立的。

例如:表达式 f1() + f2() + f3() 被分析成 (f1() + f2()) + f3() ,因为 +的结合性从左到右。但运行时对 f3 的函数调用可以最先、最后,或在 f1()f2() 之间求值,同理, f1()f2() 各自的求值顺序也不一定。

  1. C 语言标准不指定运算符优先级。它指定语言文法,而优先级表格从它导出,以简化理解。

  2. 结合性规定对于一元运算符是冗余的,且只为完备而显示:一元前缀运算符始终从右到左结合(例如++*p++(*p));而一元后缀运算符始终从左到右结合( 例如 a[1][2]++((a[1])[2])++)。

  3. 结合性对成员访问运算符有意义:a.b++ 分析为(a.b)++而非 a.(b++)

  4. sizeof 的操作数不能是类型转型:表达式 sizeof (int) * p 无歧义地转译成 (sizeof(int)) * p ,而非 sizeof((int)*p)

  5. 条件运算符中部( ?: 之间)的表达式分析为如同加括号:忽略其相对于 ?: 的优先级。

参考资料

https://zh.cppreference.com/w/c/language/operator_precedence

C 语言运算符优先级相关推荐

  1. 关于C语言运算符优先级的记忆技巧是什么?

    关于C语言运算符优先级的记忆技巧是什么? (1)先(括号)内层,后(括号)外层. (2)先函数,后运算. (3)先算术,后关系,再逻辑. (4)先乘除,后加减. (5)先左,后右. (6)搞不清,加括 ...

  2. new是不是c语言运算符优先级表,C语言运算符优先级列表(超详细)

    <C语言运算符优先级列表(超详细)>由会员分享,可在线阅读,更多相关<C语言运算符优先级列表(超详细)(7页珍藏版)>请在人人文库网上搜索. 1.本篇文章是对C语言中运算符的优 ...

  3. C语言运算符优先级列表

    本篇文章是对C语言中运算符的优先级进行了详细的分析介绍,需要的朋友参考下 每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家,欢迎拍砖! ...

  4. C语言运算符优先级和结合性

    C语言运算符优先级和结合性 优先级 运算符 含义 使用形式 结合性 操作数 1 [ ] 数组下标 数组名[整型表达式] 左结合性 ( ) 圆括号 (表达式) . 成员选择(对象) 对象.成员名 -&g ...

  5. c语言运算符优先级结合,C语言运算符优先级及结合性

    今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () ...

  6. C语言运算符优先级及结合性

    今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () ...

  7. c语言运算符优先级 从右到左,c语言运算符优先级,结合性(左/右结合详解)

    重新翻了遍c语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题. 什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的? 本文将围绕这几个问题 ...

  8. C语言运算符优先级 复习小妙招欸嘿

    C语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) ...

  9. c语言的运算符优先级文档下载,c语言运算符优先级

    c语言运算符优先级Tag内容描述: 1.运算符的优先级与结合律(从高到低排列)=优先级 名称 符号 结合性 1 数组下标 左结合性 1 函数调用 () 左结合性 1 结构和联合的成员. - 左结合性 ...

最新文章

  1. js ~取非运算符的妙用,将-1转为0(或假值)
  2. windows监控——再见zmq
  3. java·环境变量、基本数据类型
  4. 安卓首页图片轮播效果(淘宝、京东首页广告效果)
  5. 西亚斯vs2010敏捷开发分享
  6. 从零入门 Serverless | 架构的演进
  7. hadoop 2.x HA 出现ssh不能解析问题记录。
  8. Java反射机制:表单数据自动封装到JavaBean中【IT】
  9. java 清屏函数_c++清屏函数是什么
  10. rt-thread驱动篇(07)---STM32F429单片机SD卡驱动添加
  11. 老路MBA商学课|第002课:比较优势|我做的比你好,就应该我做吗?
  12. CCD传感器成像、尺寸、曝光时间
  13. HBuilderX真机模拟uni-app项目 + 上架应用市场
  14. opencv实现眼动检测【胡子哥哥】
  15. php显示动态的文字,动态文字制作软件,视频上制作动感文字/动态字幕条
  16. CSDN博客个人主页左侧栏添加微信二维码
  17. VMware Fusion 12.2.1 SLIC 2.6 MOD
  18. 如何用Python快速实现一个垃圾分类APP【附带微信小程序】
  19. GStreamer1.0 工具用法
  20. 前端click事件及自定义事件

热门文章

  1. 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)
  2. 频繁项集挖掘之Aprior和FPGrowth算法
  3. String,StringBuffer,StringBuilder区别
  4. 批量操作WinRAR实用技巧七招
  5. c++学习笔记之析构函数
  6. 机器学习导论(张志华):正定核应用
  7. 【转】C++读写.mat文件的方法
  8. [转]FFT倒序算法—雷德算法
  9. caffe中solver.prototxt文件参数解释
  10. Matlab循环读取txt文件并对其中数据进行计算最后导出为excel