第三章:运算符及其表达式(待补充)
概述
运算符是指用来对运算对象进行各种运算的操作符号.
表达式是指由端个运算对象和运算符组合在一起的合成算式.
运算对象包括常数,常量,变量和函数.
本章内容如下:
- 算数运算符及算数表达式
- 赋值运算符及赋值表达式
- 关系运算符及关系表达式
- 逻辑运算符及逻辑表达式
- 条件运算符及条件表达式
- 逗号运算符及逗号表达式
- 算数运算符及算数表达式
- 赋值运算符及赋值表达式
- 关系运算符及关系表达式
- 逻辑运算符及逻辑表达式
- 条件运算符及条件表达式
- 逗号运算符及逗号表达式
- 位运算符
算术运算符及算数表达式
算数运算符与我们生活中的运算符相似,但是也有不同的地方.算数表达式即由算数运算符连接起来的多个变量的式子.
算术运算符
算数运算符包括基本的四则运算算数符和自增,自减运算符.
算术运算符详情见下:
运算符 | 名称 | 运用举例 | 实现功能 |
+ | 加法运算符 | a+b | 求a与b的和 |
正值运算符 | +5 | 表示正数5 | |
- | 减法运算符 | a-b | 表示a与b的差 |
负值运算符 | -8 | 表示-8 | |
* | 乘法运算符 | a*b | 求a与b的乘积 |
/ | 除法运算符 | a/b | 求a除以b的商 |
% | 求余运算符 | a%b | 求a除以b的商 |
++ | 自增运算符 | ++a | 变量a的值加1,等价于a+1 |
-- | 自减运算符 | --b | 变量b的值减1,等价于b-1 |
关于运算符级别的声明如下:
- 正负运算符属于同一级别运算符,方向是自右向左.
加减运算符属于同一级别的运算符,方向是自左向右. - 乘除求余是同一级别运算符,方向是自左向右
- 自加自减是同一级别的运算符,方向是自右向左
- 举例: ++a → a的值先增加1,然后在参与其他运算
a++ → a的值先参与其他运算,再加1
–a → a的值先减少1,然后再参与其他运算
a-- → a的值先参与其他运算,然后再减少1
举例: m=3;m1=m++
现将m的值赋给m1,在对m加1
- 举例: ++a → a的值先增加1,然后在参与其他运算
关于各个运算符的使用需要注意的点如下:
- 除法运算符除数不能为0
- 乘法运算符不能省略
- 整型相除得整型,有一个是浮点数,则得到浮点数
- 求余运算符只适合于整形数据和字符型数据
此外,对于自增自减运算符,还有以下几点需要说明:
- 自增自减只能适用于变量,不能用于常量或者表达式
例如: (a+b)++是错误的 - 在一个表达式中对一个变量自增自减多次可能会造成困惑,这个时候最好增加括号
例如: k=(++a)+(++a) - 自增和自减操作对象只能是整型变量,字符型变量和指针
通常用于循环中来计数或者使指针前移后移
算数表达式
算数表达式指用算数运算符将运算对象即运算量或者操作数谅解起来,构成符合C语言语法规则的式子.
算数表达式中,运算对象包括:常量,变量和函数
需要说明的点如下:
- 算数表达式的求职顺序按照算术运算的优先级别高低次序进行,
先执行级别高的,后执行级别低的 - 在算术表达式中,运算对象有常量,也有变量.
但是由于各个量的类型并不统一,因此会先对各个运算对象转换数据类型
一般由系统自己完成
赋值运算符及赋值表达式
在前面介绍的变量的赋值的时候,其实就已经用到了赋值运算符.
C语言的赋值运算符主要包括简单赋值运算符和复合赋值运算符
这里主要讲解简单赋值运算符,复合赋值运算符在位运算符中进一步讲解
赋值运算符
赋值运算符的作用就是把赋值运算符右边的值赋给左边的变量
所有的赋值运算符如下(包括简单赋值运算符和复杂赋值运算符):
运算符 | 名称 | 应用举例 | 实现功能 |
---|---|---|---|
= | 赋值 | a=b | 将b的值赋给a |
+= | 加赋值 | a+=b等价于a=a+b | 将a+b的值赋给a |
-+ | 减赋值 | a-=b等价于a=a-b | 将a-b的值赋给a |
*= | 乘赋值 | a*=b等价于a=a*b | 将a*b的值赋给a |
/= | 除赋值 | a/=b等价于a=a/b | 将a/b的值赋给a |
%= | 求余赋值 | a%=b等价于a=a%b | 将a%b的值赋给a |
&= | 位与赋值 | a&=b等价于a=a&b | 将a&b的值赋给a |
|= | 位或赋值 | a|=b等价于a=a|b | 将a|b的值赋给a |
^= | 位异或赋值 | a=b等价于a=ab | 将a^b的值赋给a |
<<= | 位左移赋值 | a<<=2等价于a=a<<2 | 将a左移两位胡赋值给a |
>>= | 位右移赋值 | a>>=2等价于a=a>>2 | 将a右移两位后赋值给a |
关于赋值运算符有以下几点需要说明:
-
赋值运算符左边必须是变量,右边可以使常量,变量,函数,表达式
-
在赋值的时候,如果右边的常量,变量,函数和表达式的值不是左边变量的类型,会进行自动或者强制类型转换
int a; a='b'; >>>a为b的ASCII码值 自动类型转换 double d; int a; a=(int)d%5; >>>a为整数 强制类型转换
-
复合赋值运算符是由其他运算符与基本的赋值运算符组合而成,是一个整体,不能分开
赋值表达式
赋值表达式指用赋值运算符将一个变量和一个表达式连接起来的式子.
一般的书写形式如下:
变量 赋值运算符 表达式
关于赋值表达式,有以下几点需要说明:
-
赋值运算符左边必须是变量,右边可以是变量,也可以是赋值表达式
而赋值表达式左边是一个赋值表达式时,需要先用括号括起来.(a=3*4)=4*6; >>> a先等于12,再被赋值为24 a=3*4=4*6; >>> 错误,编译不通过,会报错;因为3*4是常量,不能放在第二个赋值符号右边
-
赋值表达式右边的表达式可以使一个算数表达式,关系表达式,逻辑表达式,也可以是一个赋值表达式
而且赋值表达式嵌套的时候,处理方向是先右边的赋值表达式,再左边的赋值表达式a=b=2; >>>b先等于2,a再等于b a=(b=1)+1; >>>b先等于1,a=b+1 a=c+=1; >>>c=c+1,a=c
-
C语言中,赋值表达式可以出现在其他语句中
printf("%d",a=b=3); >>>3 //注意输出的是a的值
关系运算符及关系表达式
C语言中,关系运算常用语选择结构,循环年结构的条件判断
由关系运算符连接的式子称为关系表达式,用于条件的判断.
关系运算符
关系运算符使用来比较两个运算量大小的运算符
运算结果为1/0,真/假.
具体的关系运算符见下表:
关系运算符 | 名称 | 应用举例 | 实现功能 |
---|---|---|---|
< | 小于 | a<b | a小于b |
<= | 小于等于 | a<=b | a小于或等于b |
> | 大于 | a>b | a大于b |
>= | 大于等于 | a>=d | a大于或等于b |
== | 等于 | a==b | a等于b |
!= | 不等于 | a!=b | a不等于b |
关于关系运算符,需要声明的点如下:
-
关系运算符的优先级低于算数运算符,但比赋值运算符级别高
a=2*2<8 等价于 a=((2*2)<8) >>>a=1
-
关系运算符用于比较的两个运算量的类型为整型,字符型,也可以连接两个表达式,比较结果是一个布尔值
-
前四种关系运算符优先级别相同,后两个种关系运算符级别相同,前四种高于后两种
结合方向是从左到右,同级别的关系运算符从右到左a==b>=c; >>>先判断b>=c,再判断a与b>=c的逻辑量
关系表达式
由关系运算符连接起来的式子称为关系表达式
表达式 关系运算符 表达式
逻辑运算符及逻辑表达式
逻辑运算符
逻辑运算符是对两个含有关系运算的表达式或逻辑值进行运算的符号.
集体的逻辑运算符见下表:
逻辑运算符 | 名称 | 结核性 | 应用举例 | 功能说明 |
---|---|---|---|---|
&& | 与 | 自左向右 | a&&b | a与b相同 |
|| | 或 | 自左向右 | a||b | a与吧向或 |
! | 非 | 自右向左 | !a | 非a |
需要说明的点如下:
- 逻辑非的优先级高于逻辑与,高于逻辑或
- 目前为止,所有的运算符有算数运算符,赋值运算符,关系运算符和逻辑运算符,它们的运算优先级如下:
逻辑非>算术运算符>关系运算符>逻辑与,逻辑或>赋值运算符
逻辑表达式
由逻辑运算符和表达式构成的式子称为逻辑表达式
逻辑表达式的运算对象为:整型,实数型,字符型
条件运算符及条件表达式
条件运算符是C语言中唯一一个三元运算符,他根据一个表达式的结果等于true还是false来执行两个表达式中的一个.
条件运算符
条件运算符有三个运算对象,三个运算对象都有表达式.
运算符 | 名称 | 应用举例 | 功能说明 |
---|---|---|---|
? : | 条件运算繁衍 | a?b:c | a为真,计算b; a为假,计算c |
需要说明的点如下:
- 第一个运算对象可以使任何类型的表达式
第二个,第三个运算对象必须是相同类型的表达式.
条件表达式
由条件运算符连接起来的表达式称为条件表达式
表达式1 ? 表达式2 : 表达式3
需要说明的点如下:
-
整个条件表达式的求解结果如下:
1.求解表达式1
2.如果表达式1为真,则返回表达式2
3.如果表达式1为假,则返回表达式3 -
条件表达式具有返回值.
-
条件表达式支持嵌套使用****
-
表达式2和表达式3都必须是表达式,不能是函数或者语句
;
a为假,计算c |
需要说明的点如下:
- 第一个运算对象可以使任何类型的表达式
第二个,第三个运算对象必须是相同类型的表达式.
条件表达式
由条件运算符连接起来的表达式称为条件表达式
表达式1 ? 表达式2 : 表达式3
需要说明的点如下:
-
整个条件表达式的求解结果如下:
1.求解表达式1
2.如果表达式1为真,则返回表达式2
3.如果表达式1为假,则返回表达式3 -
条件表达式具有返回值.
-
条件表达式支持嵌套使用****
-
表达式2和表达式3都必须是表达式,不能是函数或者语句