运算符和表达式
C语言中运算符的种类有很多,最常见的就是 + - * / ,除此之外,还有其他运算符可以帮助我们实现更加复杂的程序
表达式,是由运算符、变量、常量 这三种中的一种或几种组成的
一个合法的表达式 不一定要有运算符,但是运算符自己无法构成合法的表达式
作为一个表达式,如何正确地看待?
<1>看 表达式的 功能
<2>看 表达式的 值
一.[算术运算符] + - * / %
原则:相同类型的数据在一起做运算,结果还是原来的类型。
%--取余--运算的结果是余数。
取余运算的左右两边的操作数必须是正数
不同类型的数据要做混合运算,必须要遵循以下原则
10%1.2;
<1>整型要向浮点型看齐:int+float=float
1.2f%2.4
printf("%c\n",10+'a');
<2>单精度要向双精度看齐:float+double=double
<3>短字节向长字节看齐:char+int=int
<4>*有符号向无符号看齐:int+unsigned int=unsigned int
int v1=10;unsigned int v2=-1;//有符号整型变量 v1,0000 0000~0000 1010//无符号整型变量 v2,1111 1111~1111 1111--- 2^32-1if(v1>v2){ printf("v1>v2\n");}else{ printf("v1<=v2\n");}printf("v2==%u\n",v2);
二.[赋值运算符] =
赋值表达式:
变量=表达式
[功能]赋值表达式的功能:计算右边表达式的值,给左边变量赋值
[值] 整个赋值表达式的值是左边变量被赋值之后的值。
[注] 赋值表达式左边必须是变量
C中求x的y次方,用 pow 函数,这是个系统库函数
使用这个函数,需要包含头文件 math.h
<>是用来包含系统头文件,“”是用来包含用户自己创建的头文件
三.[复合赋值运算符] += -= *= /= %=
赋值表达式:
变量 += 表达式
相当于:变量 = 变量 + 表达式
例子:a += 10 相当于 a = a + 10
[功能]在变量a原值的基础上累加一个值
[值] 整个表达式的值是左边变量被赋值以后的值
[注] 赋值号左边必须是变量
四.[逗号运算符] ,
逗号表达式:
表达式1,表达式2,表达式3......
例子:a,10
[功能]从左到右,依次计算每一个表达式的值
[值] 逗号表达式 整体的值是 最右边表达式的值
五.[关系运算符] < <= > >= == !=
关系表达式:
表达式1 < 表达式2
[功能]计算运算符左右两边的表达式的值,比较大小
[值] 关系表达式 所表示的关系成立,整个表达式的值称为逻辑“真”,对应数字1
关系表达式 所表示的关系不成立,整个表达式的值称为逻辑“假”,对应数字0
关系运算符构成的表达式 往往和if语句(流程控制语句)结合起来使用
六.[自增/自减运算符] ++ - -
自增表达式:变量++ ++变量
自减表达式:变量- - - -变量
[功能]不论是自增表达式还是自减表达式,都是对变量本身进行加减操作
变量++,++变量,都是让变量自身的值加1
变量- - , - -变量,都是让变量自身的值减1
[值] 作为自增、自减,表达式是有值的
变量++,[先取值,再++],先取的值 作为 整个表达式的值
++变量,[先++,再取值],后取的值 作为 整个表达式的值
七.[强制类型转换 - 运算符]
(type)表达式
[注]强制类型转换运算符 改变的只是表达式的值的类型
八.[三目运算符] ?:
单目运算符:只需要结合一个操作就可以构成合法表达式 ++ - - &
双目运算符:需要结合两个操作数才可以构成合法的表达式 + - * / % +=
三目运算符表达式:
表达式1?表达式2:表达式3
[功能]先计算表达式1的值,根据表达式1的值的“真”、“假”(“真”为1,“假”为0),决定计算表达式2还是表达式3
如果表达式1为“真”,计算表达式2的值,表达式3被忽略
如果表达式1为“假”,计算表达式3的值,表达式2被忽略
[值] 如果表达式1的值为“真”,执行表达式2,表达式2的值作为整个表达式的值
如果表达式1的值为“假”,执行表达式3,表达式3的值作为整个表达式的值
九.[逻辑运算符] && || !
[与表达式]
表达式1&&表达式2
[功能] 根据&&左右两边表达式的值判断总表达式的值是否为“真”
[值]
表达式1 表达式2 总表达式
真 真 真
假 真 假
真 假 假
假 假 假
[注] 左右两个表达式的值,有一个为“假”,结果就为“假”
[注] 实际在程序中,当左边的表达式1为“假”时,总表达式立即为“假”,表达式2被忽略(短路)
[或运算符] || 读作“或者”
或表达式:
表达式1||表达式2
[功能] 从左到右依次计算每个表达式的值,根据两个表达式的值,决定总表达式的值的“真假”
[值]
表达式1 表达式2 总表达式
真 真 真
假 真 真
真 假 真
假 假 假
[注] 左右两个表达式有一个为“真”,结果就为“真”
[注] 在实际的开发中,当左边表达式1为“真”时,总表达式就为“真”,表达式2被忽略(短路)
[非运算符] !
非表达式:
!表达式
[功能] 计算表达式的值,然后取反(“假”变“真”,“真”变“假”)
[值]
表达式 总表达式
真 假
假 真
[总结] 在一个表达式中,如果有多个运算符,优先级高的运算符优先和操作数结合
分析任何一个表达式,首先要分清运算符的优先级,然后优先级高的优先结合,最后再去运算