了解常见C语言操作符
hello 大家好欢迎来到我的博客
之前我们认识了常见的数据类型,同时也学会了如何让使用变量。
认识了数据,接下来就要学习操作数据的工具——操作符
此篇给大家讲解常见操作符,其他复杂操作符后续给大家单独讲解
一、什么操作符
C 语言标准中,操作符(Operator)是:
语法上的终结符(token),用于指定对一个或多个操作数(operand)执行的运算或操作,这些操作包括计算、赋值、类型转换、内存访问、表达式求值控制等。
比如我们常见的+、=、&&都属于操作符。
操作符与操作数结合,构成表达式(expression),每个操作符的行为、优先级、结合性、类型转换规则,均由标准明确规定。
二、操作数与表达式
2.1 操作数
- 标准定义:操作符执行运算时作用的数据实体,是运算的 “输入值”。
- 常量操作数:如
5、3.14、'A' - 变量操作数:如 age、
num - 表达式操作数:如:(a+b)*6中操作数 :a、b、(a+b)、6 、(a+b)*6 表达式本身也可以作为操作数
2.2 表达式
- 标准定义:由操作符 + 操作数按语法规则组合而成,能够计算出一个值的语法单元。
| 类型 | 示例 | 说明 |
|---|---|---|
| 算术表达式 | a + b、x * 3 | 用算术操作符组合,结果为数值 |
| 关系表达式 | a > b、x == 5 | 用关系操作符组合,结果为0(假)或1(真) |
| 逻辑表达式 | a > b && x < 10 | 用逻辑操作符组合,结果为0或1,存在短路求值 |
| 赋值表达式 | a = 10、x += 3 | 用赋值操作符组合,结果为赋值后的值 |
| 逗号表达式 | a = 1, b = 2, a + b | 用逗号操作符组合,结果为最后一个表达式的值 |
三、常见操作符
(一) 算数操作符
+ - * / %
+、-、* 操作符与数学中使用方法无区别,这里不为大家做过多的了解。
(1)/
- 整数相除,舍去小数,只取整数部分
- 如果希望得到浮点数,两个运算数中至少有一个浮点数
例如:5/2=2(5/2=2.5 舍去小数0.5); 5.0/2=2.5;5/2.0=2.5;
- 结果的符号 :同号得正,异号得负
- 除数不能为 0
(2)%
- 取模/余运算符:返回两个整数相除的余值。
注意:%只能用于整数,不能用于浮点数
- 结果的符号:取决于被除数(也就是第一个数)
- 除数不能为 0
例如:11%5=1(11/5=2余1 取余结果为1);11%-5=2 ;-11%5=-2;
(二)赋值操作符
= += -= *= /= %= <<= >>= &= |= ^=
- 连续赋值:a=b=c+3
- 复合赋值:先运算再赋值
例如:a=a+10 等价于 a+=10;b=b*5 等价于 b*=5;
(三)单目操作符
常见单目操作符: ++ -- + -sizeof
单目操作符仅有一个操作数
(1)自增:++
- 前置++:++a 先++后使用
- 后置++:a++ 先使用后++
注:当a++与++a单独使用时 a++与++a 一样例如:int a=5 a++ 等于 ++a
(2)自减:
- 前置--:--a 先--后使用
- 后置--:a-- 先使用后--
同上,这里不再给大家做过多解释。
(3) 正与负 : + -
(4)sizeof 操作符:求类型 / 变量所占字节,是操作符不是函数
(四)关系操作符
> < >= <= == !=
常用来判断两个值的关系
注意
- C语言中关系的结果只有两种:真 —1 假—0
- ==是判断相等
- =是赋值
例如:a==5 判断a是否等于5, a=5 给变量a赋值为5
(五)逻辑操作符
&& || !
- 用于组合条件的判断,结果为1或0
(1)逻辑与 &&
- &&判断的是“并且”关系
- 两边都为真(1),结果才为真(1),只要有一个条件为假(0),结果就为假(0)
- 短路:在
A && B中,如果表达式 A 的结果为假(0),那么编译器会直接判定整个表达式为假,不再去执行或计算表达式 B
(2)逻辑或 ||
- 判断的是“或者”关系
- 只要有一个条件为真(1),结果就为真(1);两边都为假(0),结果才为假(0)
- 短路:如果
||左边的表达式结果为真(1),那么右边的表达式就不会再执行,整个表达式的结果直接为 1。
(3)逻辑非!
改变单个表达式的真假
- 如果操作数为真(非0),结果为假(0);如果操作数为假(0),结果为真(1)
(六)条件操作符
条件操作符是C语言中“唯一 一个三目操作符”(需要三个操作数)
表达式1 ? 表达式2 : 表达式3
- 如果表达式1为真,表达式2结果是整个表达式结果
- 如果表达式1为假,表达式3结果是整个表达式结果
(七)逗号操作符
表达式1, 表达式2, ..., 表达式n
- 从左至右一次执行每个表达式,整个逗号表达式的结果是最后一个表达式的值
(八)下标引用、函数调用和结构体成员访问操作符
- 下标引用操作符
[]:用于数组。例如arr[5],[]就是操作符,arr和5是操作数。 - 函数调用操作符
():用于调用函数。例如printf("Hello"),()就是操作符 - 结构体成员访问:
.:通过结构体变量访问成员。例如stu.name。->:通过结构体指针访问成员。例如p_stu->name。(结构体篇详细讲)
四、操作符的优先级与结合性
敲黑板这个知识点非常重要!!!
- 优先级:当一个表达式中出现了多个运算符时,决定运算符谁先算
- 结合性(左结合/ 右结合):当多个优先级相同的运算符连续出现时,决定从哪边算
左结合:从左至右算
右结合:从右至左算
- 常用优先级与结合性:
| 优先级 | 运算符 | 结合性 | 操作符名称 |
|---|---|---|---|
| 1 | ()[]->. | 左结合 | 括号、数组、结构体成员 |
| 2 | !++--*&sizeof | 右结合 | 逻辑非、自增减、指针、取地址、求字节大小 |
| 3 | */% | 左结合 | 乘、除、取余 |
| 4 | +- | 左结合 | 加、减 |
| 5 | <<=>>= | 左结合 | 大小比较 |
| 6 | ==!= | 左结合 | 相等、不等判断 |
| 7 | && | 左结合 | 逻辑与 |
| 8 | || | 左结合 | 逻辑或 |
| 9 | ?: | 右结合 | 三目条件运算 |
| 10 | =+=-=*=/= | 右结合 | 赋值运算 |
| 11 | , | 左结合 | 逗号运算 |
大家可以通过这个网站进行全面的学习:https://en.cppreference.com/w/c/language/operator_precedence
优先级小tips:
在写代码的过程中不确定优先级就加(),来控制运算顺序
此篇到这里就结束了,感谢大家的观看,感谢与我共同进步的你们!
