你真的知道吗?"/>
【C语言】操作符有几种?你真的知道吗?
- ⛩️博主主页:@威化小餅干
- 📝系列专栏:【C语言】藏宝图
- 🎏 绳锯⽊断,⽔滴⽯穿!一个编程爱好者的学习记录!
文章目录
- 🚀前言
- 🚀一、操作符是什么?
- 🚀二、操作符分类
- 【1】算数操作符
- 【2】移位操作符
- 【3】位操作符
- 【4】赋值操作符
- 【5】单目操作符
- 【6】关系操作符
- 【7】逻辑操作符
- 【8】条件操作符(三目操作符)
- 【9】逗号操作符
- 【10】下标引用、函数调用和结构成员
- 🚀三、运算符优先级(汇总)
- 🚀最后
🚀前言
C语言一经出现就以其功能丰富,表达能力强,灵活方便,应用面广等特点迅速在全世界普及和推广,很多人都开始了学习C语言。
想要学好C语言,就必须要去了解C语言中的各种操作符!
🚀一、操作符是什么?
操作符是一种运算符号,用于执行程序代码运算,用来表示某种数据关系。
🚀二、操作符分类
【1】算数操作符
+
——两个数相加-
——一个数减另一个数*
——两个数相乘/
——分子除以分母%
——取模(取余),得到整除后的余数++
——自增运算符,整数值增加 1--
——自减运算符,整数值减少 1
重点注意 /
操作符 和 %
操作符。
1、除法操作符
- 两个操作数都是整数的话,执行的是整数除法。如:10/
2
=5(整数) - 两个操作数只要有一个浮点型的话,执行的是小数除法。如:10/
3.0
=3.333333(小数)
2、取模操作符 - 操作数必须是
整数
,如果是浮点型,编译器会报错!
【2】移位操作符
<<
左移位操作符
>>
右移位操作符
注意:
- 移位操作符的操作数只能是整数。
- 移位操作符是对操作数的二进制位进行移位。
2.1、<<
左移操作符
移动规则:左边抛弃,右边补0
2.2、>>
右移位操作符
移动规则:
- 逻辑移位:左边用0填充,右边丢弃。
- 算术移位:左边用原该值的符号移位,右边丢弃。
警告
⚠️对于移位操作符,不要移动负数位,这个是未定义的。
如:
int num = 10;
num << -1;//错误做法
num >> 1;//正确做法
【3】位操作符
&
按位与|
按位或^
按位异或
位
:指二进制位
例如:
00000000000000000000000000000011——3的补码
111111111111111111111111111111111011—— -5的补码
00000000000000000000000000000011——3 & -5 = 3
规则:
- 按位与:对应的二进制位有0,则为0
- 按位或:对应的二进制位有1,则为1
- 按位异或:对应的二进制位,相同位0,相异为1
练习:
- 先分别将1和2的二进制位写出来,再进行分析,并不难理解。
【4】赋值操作符
符号:=
简单的赋值操作符,把右边操作符的值赋给左边操作数。
注意:“ = ” 是赋值,“ == ” 才是判断两个数是否相等,不能混用。
注意
:左边的操作数必须
是变量,不能是常量或表达式。
- 此外,= 还会与算数操作符 “ + ”,“ - ”,“ * ”,“ / ” 结合使用。
例如:“ += ”,“ -= ”,“ *= ”,“ /= ”
【5】单目操作符
!
——逻辑反操作-
——负值+
——正值&
——取地址sizeof
——计算操作数的类型长度(以字节为单位)~
——对一个数的二进制按位取反- -
——前置、后置- -++
——前置、后置++*
——间接访问操作符(解引用操作符)(类型)
——强制类型转换
注意sizeof与数组的关系
【6】关系操作符
<
——小于<=
——小于等于>
——大于>=
——大于等于==
——等于!=
——不等于
注意在编程的过程中==
和=
不要写错。
【7】逻辑操作符
&&
——与,如果两个操作数均为非0,则表达式的值为1,反之为0||
——或,如果两个操作数至少有一个为非0,则表达式的值为1,反之为0!
——非,如果两个操作数均为非0,则表达式的值为,反之亦反
在C语言中,0代表假(False),1代表真(True)
所以也可以这样理解:
&&
是“与”的意思,需要两端的表达式的值都为true
,该式的值才为true
。
||
是“或”的意思,两端的表达式的值只要
有一端为true
,该式的值就为true。
!
是“非”的意思,将该式的真值换成相反的真值,即false和true互换。
- 上一道360笔试题:
相关知识在《逻辑运算符 && 和 || 的短路特性》中
【8】条件操作符(三目操作符)
三目运算符也叫条件运算符,是由一个问号和一个冒号组成。
- 结构:
exp1?exp2:exp3
程序的流程是:
- 先执行表达式1,如果表达式1的结果如果为真,那么执行表达式2,并且这个整体的运算式的结果是表达式2的结果;
- 如果表达式1的结果如果为假,执行表达式3,运算式的结果是表达式3的结果。
【9】逗号操作符
看到标题,我们可能会感到好奇,怎么逗号也会是运算符?
其实一开始呀,我也没注意到这点,直到我做到了一道题,才发现了这个有趣的知识点。
思考题: 下面的y都分别为什么值?
int y=3;
int y=(1,2,3);
int y=(x=1+2),(3+4);
int y=((x=3+4),(1+2));
对,y都为 3
第二个y,因为y的值是整条语句的值,而整条语句的值是最后那个逗号后面的值。
第三个y,我们可以看成为 y=x=1+2;这样就可以很清楚地看到,y就是等于 3
第四个y,跟第二个一样,是最后那个逗号后面的值,即,y=(1+2)。
小归纳:一条语句理论上是有返回值的,如果语句里面有多个逗号,则以最后一个逗号后面的表达式值为返回值!
【10】下标引用、函数调用和结构成员
1、[ ]
下标引用操作符`
操作数:一个数组名 + 一个索引值
int arr[10];//创建数组
arr[9]=10;//使用下标引用操作符
//[ ]的两个操作数是arr和9
2、( )
函数调用操作符
接受一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3、访问一个结构的成员
.
——结构体.
成员名->
——结构体指针->
成员名
🚀三、运算符优先级(汇总)
C语言运算符优先级 详细列表
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
1 | [] | 组下标 | 数组名[常量表达式] | 左到右 | |
1 | () | 圆括号 | (表达式)/函数名(形参表) | 左到右 | |
1 | . | 成员选择(对象) | 对象.成员名 | 左到右 | |
1 | -> | 成员选择(指针) | 对象指针->成员名 | 左到右 |
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
2 | (类型) | 强制类型转换 | (数据类型)表达式 | 右到左 | |
2 | ++ | 自增运算符 | ++变量名/变量名++ | 右到左 | 单目运算符 |
2 | -- | 自减运算符 | - -变量名/变量名- - | 右到左 | 单目运算符 |
2 | * | 取值运算符 | *指针变量 | 右到左 | 单目运算符 |
2 | & | 取地址运算符 | &变量名 | 右到左 | 单目运算符 |
2 | ! | 逻辑非运算符 | !表达式 | 右到左 | 单目运算符 |
2 | ~ | 按位取反运算符 | ~表达式 | 右到左 | 单目运算符 |
2 | sizeof | 长度运算符 | sizeof(表达式) | 右到左 |
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
3 | * | 乘 | 表达式*表达式 | 左到右 | 双目运算符 |
3 | % | 余数(取模) | 整型表达式/整型表达式 | 左到右 | 双目运算符 |
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
4 | - | 减 | 表达式-表达式 | 左到右 | 双目运算符 |
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
5 | >> | 右移 | 变量>>表达式 | 左到右 | 双目运算符 |
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
6 | >= | 大于等于 | 表达式>=表达式 | 左到右 | 双目运算符 |
6 | < | 小于 | 表达式<表达式 | 左到右 | 双目运算符 |
6 | <= | 小于等于 | 表达式<=表达式 | 左到右 | 双目运算符 |
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
7 | != | 不等于 | 表达式!= 表达 | 左到右 | 双目运算符 |
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | I | 按位或 | 表达式I表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | I | 逻辑或 | 表达式I表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1?表达式2:表达式 3 | 右到左 | 三目运算符 |
🚀最后
创作不易,还请各位小伙伴多多点赞关注收藏⭐
更多推荐
【C语言】操作符有几种?你真的知道吗?
发布评论