C语言运算符优先级.ppt
上传者:我是药仙
2022-06-13 18:25:37上传
PPT文件
498 KB
C语言运算符优先级
表达式的求值过程
C语言规定了运算符的优先级和结合性
优先级
指同一个表达式中不同运算符进行计算时的先后次序
结合性
结合性是指同一个表达式中相同优先级的多个运算应遵循的运算顺序
C语言规定:单目运算符是自右向左结合,双目运算符是自左向右结合
8
表达式的求值过程
表达式的求值过程按C规定的原则求值
表达式代表了一个具体的值
实际上是一个数据加工的过程
在表达式求值时,先按运算符的优先级级别的高低次序执行
如果运算符两侧的优先级级别相同,则按规定的“结合方向”处理
提示
运算符的优先级制约着表达式的计算次序
可以通过括号()来改变表达式求值的顺序
表达式求值过程中存在某种类型数据的类型转换
9
算术表达式
由算术运算符连接数值型运算对象构成
其结果可以是整数、单精度实数和双精度实数
例:int a=2; float b=4.5;表达式 2*a+b 的结果为8.5
优先给与结合性
提示
两个整数相除其结果仍为整数(即舍去小数部分)
例如:13/10的结果为1
“%”为求余运算符,参与运算的两个数均为整数
例如:10%3=1 -10%3=-1
除以0在计算机系统中是没有意义的
用括号可以改变表达式的运算顺序
10
算术表达式
算术表达式
例1:
设 int b=7;float a=2.5,c=4.7;
表达式a+(int)(b/3*(int)(a+c)/2)%4的值?
例2:
11
自增/自减
“++”与“--”的作用是使变量的值增1或减1
C语言提供两种形式的 ++/--运算符
++a,--a(前缀运算:先进行增量运算后使用)
a++, a--(后缀运算:先使用后进行增量运算)
提示:
增和自减只能作用于变量,不允许对常量、表达式或其它进行操作
当自增/自减变量值本身就单独构成一条语句时,前缀和后缀的效果是一样的
对于“++”和“--”的使用要避免二义性
12
自增/自减
计算过程
例1:设x=5
y=++x;/*先计算x=x+1,再执行y=x,结果x=5 ,y=6*/
y=x++;/*先执行y=x,再计算x=x+1,结果y=5,x=6*/
问题:如何理解A+++B ?
C规定:自左向右取尽可能多的符号组成运算符
13
自增/自减
例2:设x=5
y=x++*x++;/*先取x的值进行“*”运算,再进行两次 x++。 y=25,x=7*/
y=++x*++x;/*先进行两次x自增1,使x的值为7,再进行相乘运算。y=49,x=7*/
14
赋值表达式
由赋值运算符“=”连接表达式(右侧)和变量(左侧)
形式:变量名=表达式
赋值运算符完成两类操作
计算
赋值
例
int a=2,float b=5.2,c; c=a*b;
赋值运算符具有右结合性
例如:a=b=3*5;/*先计算3*5,后将15赋给b,再将b的值15赋给a*/
15
赋值表达式
组合赋值表达式
组合赋值运算符将一个变量和一个表达式连接起来的式子称为组合赋值表达式
形式:变量名 <组合赋值运算符> 表达式
例: x%=y/3;/*x=x%(y/3)*/
a*=b+c /* a=a*(b+c)*/
注意:“a*=b+c”与“a=a*b+c”是不等价的
提示
“=”不是数学中的“等号”,它表示一个动作,右侧的值送与左侧的变量中(左侧只允许是变量,不能是表达式或其他)
赋值运算符两侧的类型要求一致,否则要进行类型转换
赋值运算符‘=’,相等运算符‘= =’,和一般****惯有所不同
16
表达式的求值过程
C语言规定了运算符的优先级和结合性
优先级
指同一个表达式中不同运算符进行计算时的先后次序
结合性
结合性是指同一个表达式中相同优先级的多个运算应遵循的运算顺序
C语言规定:单目运算符是自右向左结合,双目运算符是自左向右结合
8
表达式的求值过程
表达式的求值过程按C规定的原则求值
表达式代表了一个具体的值
实际上是一个数据加工的过程
在表达式求值时,先按运算符的优先级级别的高低次序执行
如果运算符两侧的优先级级别相同,则按规定的“结合方向”处理
提示
运算符的优先级制约着表达式的计算次序
可以通过括号()来改变表达式求值的顺序
表达式求值过程中存在某种类型数据的类型转换
9
算术表达式
由算术运算符连接数值型运算对象构成
其结果可以是整数、单精度实数和双精度实数
例:int a=2; float b=4.5;表达式 2*a+b 的结果为8.5
优先给与结合性
提示
两个整数相除其结果仍为整数(即舍去小数部分)
例如:13/10的结果为1
“%”为求余运算符,参与运算的两个数均为整数
例如:10%3=1 -10%3=-1
除以0在计算机系统中是没有意义的
用括号可以改变表达式的运算顺序
10
算术表达式
算术表达式
例1:
设 int b=7;float a=2.5,c=4.7;
表达式a+(int)(b/3*(int)(a+c)/2)%4的值?
例2:
11
自增/自减
“++”与“--”的作用是使变量的值增1或减1
C语言提供两种形式的 ++/--运算符
++a,--a(前缀运算:先进行增量运算后使用)
a++, a--(后缀运算:先使用后进行增量运算)
提示:
增和自减只能作用于变量,不允许对常量、表达式或其它进行操作
当自增/自减变量值本身就单独构成一条语句时,前缀和后缀的效果是一样的
对于“++”和“--”的使用要避免二义性
12
自增/自减
计算过程
例1:设x=5
y=++x;/*先计算x=x+1,再执行y=x,结果x=5 ,y=6*/
y=x++;/*先执行y=x,再计算x=x+1,结果y=5,x=6*/
问题:如何理解A+++B ?
C规定:自左向右取尽可能多的符号组成运算符
13
自增/自减
例2:设x=5
y=x++*x++;/*先取x的值进行“*”运算,再进行两次 x++。 y=25,x=7*/
y=++x*++x;/*先进行两次x自增1,使x的值为7,再进行相乘运算。y=49,x=7*/
14
赋值表达式
由赋值运算符“=”连接表达式(右侧)和变量(左侧)
形式:变量名=表达式
赋值运算符完成两类操作
计算
赋值
例
int a=2,float b=5.2,c; c=a*b;
赋值运算符具有右结合性
例如:a=b=3*5;/*先计算3*5,后将15赋给b,再将b的值15赋给a*/
15
赋值表达式
组合赋值表达式
组合赋值运算符将一个变量和一个表达式连接起来的式子称为组合赋值表达式
形式:变量名 <组合赋值运算符> 表达式
例: x%=y/3;/*x=x%(y/3)*/
a*=b+c /* a=a*(b+c)*/
注意:“a*=b+c”与“a=a*b+c”是不等价的
提示
“=”不是数学中的“等号”,它表示一个动作,右侧的值送与左侧的变量中(左侧只允许是变量,不能是表达式或其他)
赋值运算符两侧的类型要求一致,否则要进行类型转换
赋值运算符‘=’,相等运算符‘= =’,和一般****惯有所不同
16
C语言运算符优先级