• 建议先阅读基础教学:❤️《十万字C语言动漫教程》❤️

一、前言

  运算符优先级一直是让人头疼的东西,趁着 字节取消大小周 的势头来临,通宵整理了一个思维导图出来,希望对你有所帮助。这篇文章,我会仔细分析这张思维导图。
  所有的 C语言运算符的用法都在这里了,并且还有优先级的例子解析,总共 100 道题都在这篇文章里了,激(累)动(死)人(我)心(了)

二、运算符简介

  • 运算符用于执行程序代码运算,会针对一个或几个操作数来进行运算。例如:1 / 2,其操作数是 1 和 2,而运算符则是 “/”(除号)。
  • C语言把除了 控制语句输入输出 以外的几乎所有的基本操作都作为运算符处理,可见其重要性。这么说来,学会了运算符的计算,就等于学会了C语言的 1 / 3,当然这是不可能的!

三、运算符概览

1、按功能分类

  • 按照功能分类,可以分为:后缀运算符、单目运算符、算术运算符、关系运算符、位运算符、逻辑运算符、条件运算符、赋值运算符、逗号运算符。
  • 本文会对这几大类的运算符的优先级进行一个全面的讲解,然后再引入 100 道例题 ,花 1个小时的时间,彻底掌握运算符的优先级问题吧。
  • 想要原题文件的同学,可以 想尽一切办法,找到作者的微信,威逼利诱让他交出来!

2、按操作数个数分类

1)单目运算符

  • 单目运算符(也可以叫一元运算符),是指运算表达式中只有一个操作数的运算符。
  • 1)位运算符中的按位取反 ~,用法诸如:~a~(a + b)
  • 有关于 按位取反 的具体功能,可以参考如下文章:光天化日学C语言(17)- 位运算 ~ 的应用。
  • 2)逻辑运算符中的非!,用法诸如:!a!(a + b)
  • 有关 非运算 的具体功能,可以参考如下文章:光天化日学C语言(11)- 逻辑运算符。
  • 3)甚至 类型转换(type)也是一种单目运算符,用法诸如:(int)a(int)(a + b)
  • 有关类型转换的具体功能,可以参考如下文章:光天化日学C语言(12)- 类型转换。
  • 当然,还有很多,这里就不一一列举了,再讲 运算符优先级和结合性 时,我们会一个一个进行举例。

2)双目运算符

  • 双目运算符(也可以叫二元运算符),是指运算表达式中有两个操作数的运算符。
  • 1)算术运算符中的加 / 减 / 乘 / 除 / 取模(+-*/%),都是双目运算符,用法诸如:a + ba * ba - ba % b
  • 有关 算术运算符 的具体功能,可以参考如下文章:光天化日学C语言(09)- 算术运算符。
  • 2)关系运算符中的 ==<=>也都是双目运算符,用法诸如:a > ba <= ba != ba == b
  • 有关 关系运算符 的具体功能,可以参考如下文章:光天化日学C语言(10)- 关系运算符 。
  • 3)当然逻辑运算符也有双目的。

3)三目运算符

  • 三目运算符(也可以叫三元运算符),是指运算表达式中有三个操作数的运算符。
  • 在C语言中只有一个三目运算符,它叫条件表达式,表示为 ?:,考虑这样一句话:
    if(a + b > 5) {a++;}else {b++;}
  • 可以表示成如下一句话:
    a + b > 5 ? a++ : b++;
  • 这是C语言比较独特的语法糖,能够大大节省代码量。

四、运算符优先级和结合性

  • 优先级可以认为是大分类,优先级不同的运算符,按照优先级高的优先计算。结合性可以认为是小分类,优先级相同的运算符,按照结合性进行计算,结合性只有两种:从左到右 和 从右到左。接下来,我们就围绕优先级和结合性来讨论下上述按照功能分类的运算符吧。

1、后缀运算符

运算符 名称 形式 举例1 举例2
[] 数组下标 数组名[常量表达式] a[2] a[2][3]
() 圆括号 (表达式) 或 函数名(形参表) (a+1) fun(x,y,z)
. 对象的成员选择 对象.成员名 a.b a.b.c
-> 指针的成员选择 指针.成员名 a->b a->b->c

2、单目运算符

运算符 名称 形式 举例1 举例2
+ 正号 +表达式 +5 +a[3]
- 负号 -表达式 -5 -a[3]
(type) 强制类型转换 (数据类型)表达式 (int)a (int)a[0]
++ 自增运算符 ++变量名 / 变量名++ ++i i++
-- 自增运算符 –变量名 / 变量名– --i i--
! 逻辑非 !表达式 !a[0] !a[0]++
~ 按位取反 ~表达式 ~a ~~a
& 取地址 &变量名 &a &(a+1)
* 解引用 *指针变量名 *a *(a+1)
sizeof 取长度 sizeof(表达式) sizeof(a) sizeof(a + b)

3、算术运算符

运算符 名称 形式 举例1 举例2
* 表达式 * 表达式 3 * 5 3 * a
/ 表达式 / 表达式 3 / 5 3 / 5.0
% 整型表达式 % 整型非零表达式 3 % 5 b % -1
运算符 名称 形式 举例1 举例2
+ 表达式 + 表达式 a + b (a++) + b
- 表达式 - 表达式 a - b a - b--

4、移位运算符

运算符 名称 形式 举例1 举例2
<< 左移 变量<<表达式 1<<5 1<<(i+j)
>> 右移 变量>>表达式 x>>1 x>>a

5、关系运算符

运算符 名称 形式 举例1 举例2
< 小于 表达式<表达式 1 < 2 x < y
<= 小于等于 表达式<=表达式 1 <= 2 x <= y
> 大于 表达式>表达式 1 > 2 x > y
>= 大于等于 表达式>=表达式 1 >= 2 x >= y
运算符 名称 形式 举例1 举例2
== 等于 表达式==表达式 1 == 2 x == y
!= 不等于 表达式!=表达式 1 != 2 x != y

6、双目位运算符

运算符 名称 形式 举例1 举例2
& 等于 表达式&表达式 1 & 2 x & y
^ 等于 表达式^表达式 1 ^ 2 x ^ y
| 等于 表达式\表达式 1 | 2 x | y

7、双目逻辑运算符

运算符 名称 形式 举例1 举例2
&& 逻辑与 表达式&&表达式 a && b a + 5 && b + 5
|| 逻辑与 表达式||表达式 a || b a + 5 || b + 5

8、条件运算符

运算符 名称 形式 举例1 举例2
?: 条件运算符 表达式1? 表达式2: 表达式3 a>b?a:b a<b?a:b

9、赋值运算符

运算符 名称 形式 举例1 举例2
= 赋值 变量=表达式 a = b a = 1
+= 加后赋值 变量+=表达式 a += b a += 1
-= 减后赋值 变量-=表达式 a -= b a -= 1
*= 乘后赋值 变量*=表达式 a *= b a *= 1
/= 除后赋值 变量/=表达式 a /= b a /= 1
%= 模后赋值 变量%=表达式 a %= b a %= 1
>>= 右移后赋值 变量>>=表达式 a >>= b a >>= 1
<<= 左移后赋值 变量<<=表达式 a <<= b a <<= 1
&= 位与后赋值 变量&=表达式 a &= b a &= 1
^= 异或后赋值 变量^=表达式 a ^= b a ^= 1
|= 位或后赋值 变量|=表达式 a |= b a |= 1

10、逗号运算符

运算符 名称 形式 举例1 举例2
, 逗号运算符 表达式1,表达式2,… a+b,a-b a||b,a&b
  • 了解逗号表达式的优先级最低以后,我们就可以通过,将语句分隔,而无需添加多余的括号了。

五、运算符优先级和结合性总结

1、结合性

结合方向只有 3 个是 从右往左,其余都是 从左往右(比较符合人的直观感受)。
  (1)一个是单目运算符;
  (2)一个是双目运算符中的 赋值运算符;
  (3)一个条件运算符,也就是C语言中唯一的三目运算符。

2、优先级

后缀运算符和单目运算符优先级一般最高,逗号运算符的优先级最低。快速记忆如下:

单目逻辑运算符 > 算术运算符 > 关系运算符 > 双目逻辑运算符 > 赋值运算符

六、运算符优先级面试错题100例


《C语言运算符100例》优先级面试错题相关推荐

  1. 经典C语言程序100例之九九

    经典C语言程序100例之九九 如题 话不多说了,直接上代码 如题 [程序99] 题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中. 1 ...

  2. 经典C语言程序100例之九七

    经典C语言程序100例之九七 如题 话不多说了,直接上代码 如题 [程序97] 题目:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止. 1.程序分析: 话不多说了,直接上代码 2.程序 ...

  3. 经典C语言程序100例之九六

    经典C语言程序100例之九六 如题 话不多说了,直接上代码 如题 [程序96] 题目:计算字符串中子串出现的次数 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include " ...

  4. 经典C语言程序100例之九五

    经典C语言程序100例之九五 如题 话不多说了,直接上代码 如题 [程序95] 题目:家庭财务管理小程序 1.程序分析: 话不多说了,直接上代码 2.程序源代码: /money management ...

  5. 经典C语言程序100例之八九

    经典C语言程序100例之八九 如题 话不多说了,直接上代码 如题 [程序89] 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除 ...

  6. 经典C语言程序100例之八八

    经典C语言程序100例之八八 如题 话不多说了,直接上代码 如题 [程序88] 题目:读取7个数(1-50)的整数值,每读取一个值,程序打印出该值个数的*. 1.程序分析: 话不多说了,直接上代码 2 ...

  7. 经典C语言程序100例之八七

    经典C语言程序100例之八七 如题 话不多说了,直接上代码 如题 [程序87] 题目:回答结果(结构体变量传递) 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include " ...

  8. 经典C语言程序100例之八六

    经典C语言程序100例之八六 如题 话不多说了,直接上代码 如题 [程序86] 题目:两个字符串连接程序 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include "std ...

  9. 经典C语言程序100例之八四

    经典C语言程序100例之八四 如题 话不多说了,直接上代码 如题 [程序84] 题目:一个偶数总能表示为两个素数之和. 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include &q ...

  10. 经典C语言程序100例之八三

    经典C语言程序100例之八三 如题 话不多说了,直接上代码 如题 [程序83] 题目:求0-7所能组成的奇数个数. 1.程序分析: 话不多说了,直接上代码 2.程序源代码: void main() { ...

最新文章

  1. 2019天猫双11成交额达2684亿,盘点今年双11有哪些亮点!
  2. 安装rpm的mysql_linux下安装rpm格式的mysql
  3. 使用 Rxjs 解决 Angular Component 之间的通信问题
  4. leetcode 746. 使用最小花费爬楼梯(dp)
  5. Vista SP1、IIS7,安装ASP.Net 1.1、VS2003、NetAdvantage 2004vol、Sql Server2000全攻略
  6. 中山大学附属第一医院精准医学研究院 消化系统肿瘤研究于君课题组招聘启事...
  7. win10隐藏linux,Win10如何隐藏Windows Defender任务栏图标
  8. TeraTerm自动登录(Login)
  9. Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression Regularization
  10. Snort里如何将一个tcpdump格式的二进制文件读取打印到屏幕上(图文详解)
  11. 常见linux服务器存储空间,全面了解linux服务器的常用命令总结
  12. UBUNTU启动到BusyBox,怎么办?
  13. 微信小程序学习笔记-(10)-猫眼电影案例
  14. 计算机辅助翻译术语PPT,计算机辅助翻译
  15. Topaz DeNoise AI 3.7 人工智能降噪
  16. 《马哥出品高薪linux运维教程》wingkeung学习笔记-linux基础入门课程
  17. 常用快捷键大全Win7快捷键
  18. linux系统CPU隔离isolcpu参数设置
  19. windows安装gensim
  20. [软考知识点总结③] 【中级软件设计师】计算机组成原理——校验码、海明校验码、奇偶校验码、循环校验码

热门文章

  1. 安装AdventureWorks2008R2
  2. 交叉编译ghostscript-9.53.3
  3. Java中各种读写文件的方法
  4. 利用python画简单图形示例代码_使用python画社交网络图实例代码
  5. 2012年9月ITbrand笔记本品牌排行榜
  6. 给potplayer配置iptv源,看所有你想看的电视
  7. 五、鼎捷T100生产管理之报工
  8. 运动会计算机专业方队,求运动会入场式创意。要低成本的最好。我是计算机专业的。急!在线等,高悬赏!...
  9. 初学CODEBLOCK+wxWidgets
  10. CSS 3之鼠标特效