《C语言运算符100例》优先级面试错题
- 建议先阅读基础教学:❤️《十万字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 + b
、a * b
、a - b
、a % b
。 - 有关 算术运算符 的具体功能,可以参考如下文章:光天化日学C语言(09)- 算术运算符。
- 2)关系运算符中的
==
、<=
、>
也都是双目运算符,用法诸如:a > b
、a <= b
、a != b
、a == 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例》优先级面试错题相关推荐
- 经典C语言程序100例之九九
经典C语言程序100例之九九 如题 话不多说了,直接上代码 如题 [程序99] 题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中. 1 ...
- 经典C语言程序100例之九七
经典C语言程序100例之九七 如题 话不多说了,直接上代码 如题 [程序97] 题目:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止. 1.程序分析: 话不多说了,直接上代码 2.程序 ...
- 经典C语言程序100例之九六
经典C语言程序100例之九六 如题 话不多说了,直接上代码 如题 [程序96] 题目:计算字符串中子串出现的次数 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include " ...
- 经典C语言程序100例之九五
经典C语言程序100例之九五 如题 话不多说了,直接上代码 如题 [程序95] 题目:家庭财务管理小程序 1.程序分析: 话不多说了,直接上代码 2.程序源代码: /money management ...
- 经典C语言程序100例之八九
经典C语言程序100例之八九 如题 话不多说了,直接上代码 如题 [程序89] 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除 ...
- 经典C语言程序100例之八八
经典C语言程序100例之八八 如题 话不多说了,直接上代码 如题 [程序88] 题目:读取7个数(1-50)的整数值,每读取一个值,程序打印出该值个数的*. 1.程序分析: 话不多说了,直接上代码 2 ...
- 经典C语言程序100例之八七
经典C语言程序100例之八七 如题 话不多说了,直接上代码 如题 [程序87] 题目:回答结果(结构体变量传递) 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include " ...
- 经典C语言程序100例之八六
经典C语言程序100例之八六 如题 话不多说了,直接上代码 如题 [程序86] 题目:两个字符串连接程序 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include "std ...
- 经典C语言程序100例之八四
经典C语言程序100例之八四 如题 话不多说了,直接上代码 如题 [程序84] 题目:一个偶数总能表示为两个素数之和. 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include &q ...
- 经典C语言程序100例之八三
经典C语言程序100例之八三 如题 话不多说了,直接上代码 如题 [程序83] 题目:求0-7所能组成的奇数个数. 1.程序分析: 话不多说了,直接上代码 2.程序源代码: void main() { ...
最新文章
- 2019天猫双11成交额达2684亿,盘点今年双11有哪些亮点!
- 安装rpm的mysql_linux下安装rpm格式的mysql
- 使用 Rxjs 解决 Angular Component 之间的通信问题
- leetcode 746. 使用最小花费爬楼梯(dp)
- Vista SP1、IIS7,安装ASP.Net 1.1、VS2003、NetAdvantage 2004vol、Sql Server2000全攻略
- 中山大学附属第一医院精准医学研究院 消化系统肿瘤研究于君课题组招聘启事...
- win10隐藏linux,Win10如何隐藏Windows Defender任务栏图标
- TeraTerm自动登录(Login)
- Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression Regularization
- Snort里如何将一个tcpdump格式的二进制文件读取打印到屏幕上(图文详解)
- 常见linux服务器存储空间,全面了解linux服务器的常用命令总结
- UBUNTU启动到BusyBox,怎么办?
- 微信小程序学习笔记-(10)-猫眼电影案例
- 计算机辅助翻译术语PPT,计算机辅助翻译
- Topaz DeNoise AI 3.7 人工智能降噪
- 《马哥出品高薪linux运维教程》wingkeung学习笔记-linux基础入门课程
- 常用快捷键大全Win7快捷键
- linux系统CPU隔离isolcpu参数设置
- windows安装gensim
- [软考知识点总结③] 【中级软件设计师】计算机组成原理——校验码、海明校验码、奇偶校验码、循环校验码
热门文章
- 安装AdventureWorks2008R2
- 交叉编译ghostscript-9.53.3
- Java中各种读写文件的方法
- 利用python画简单图形示例代码_使用python画社交网络图实例代码
- 2012年9月ITbrand笔记本品牌排行榜
- 给potplayer配置iptv源,看所有你想看的电视
- 五、鼎捷T100生产管理之报工
- 运动会计算机专业方队,求运动会入场式创意。要低成本的最好。我是计算机专业的。急!在线等,高悬赏!...
- 初学CODEBLOCK+wxWidgets
- CSS 3之鼠标特效