内容正文:
第3章表达式
第3章表达式
01表达式概述
02赋值表达式
03算术表达式
04强制类型转换及自增自减
05逗号表达式
06典型例题
2
算术表达式
这节课,我们讨论算术表达式。由于整数和小数在编码方式上的差异,用计算机求值时,算术表达式有特定的运算规则。
3
算术表达式
C语言中的算术操作符有+、 -、*、/和%,用算术操作符和括号将操作数连接起来组成的式子,称为算术表达式。
算术表达式实际求值时操作数的类型需一致,结果也是同类型数据。
表达式3 / 2的结果是1,int型。
不同类型的操作数求值时会转换成同类型。
表达式3 + 2.3求值时会变成3.0 + 2.3,结果5.3,double型。
C语言中的算术操作符有+、 -、*、/和%,用算术操作符和括号将操作数连接起来组成的式子,称为算术表达式。
算术表达式实际求值时操作数的类型需一致,结果也是同类型数据。
表达式3 / 2的结果是1,int型。
不同类型的操作数求值时会转换成同类型。
表达式3 + 2.3求值时会变成3.0 + 2.3,结果5.3,double型。
不同类型数据的编码不同,无法进行混合运算。
4
类型转换的规则
VC6.0中int型就是long型,因此,VC6.0中进行算术运算的实际操作数的类型只能是:long型与long型;unsigned long型与unsigned long型;double型与double型。
算术表达式实际求值时,操作数的类型不仅为同类型,而且还必须是规定的类型。
算术表达式求值时,数据类型需统一,类型转换的规则如下。
float型自动转换成double型,char型自动转换成int型。short型和unsigned short型会自动转换成有符号long型。
VC6.0中int型就是long型,因此,VC6.0中进行算术运算的实际操作数的类型只能是:long型与long型;unsigned long型与unsigned long型;double型与double型。
也就是说算术表达式实际求值时,操作数的类型不仅为同类型,还必须是规定的类型。
5
数据类型的自动转换
有int a = 3;,float f = 2.3;,表达式a + f求值时,根据类型转换规则,会选用只有double型存储单元的“double型运算器”。
操作数a的值会被读取到运算器中的存储单元,于是int型3就“自动转换” 成了double型3.0,运算器中的两个加数是double型的3.0和2.3,表达式a + f的值是5.3,double型。
有int a = 3;,float f = 2.3;,表达式a + f求值时,根据类型转换规则,会选用只有double型存储单元的double型运算器。
操作数a的值会被读取到运算器中的存储单元,于是int型3就“自动转换” 成了double型3.0,运算器中的两个加数是double型的3.0和2.3,表达式a + f的值是5.3,double型。
操作数读取到运算器中特定类型存储单元的过程会发生数据类型的自动转换。
6
思考题:
有int a = 3;,float f = 2.3;,表达式a + f求值时,实际求值的两个是double型的3.0和2.3,求值后,变量a和f的类型和值改变了吗?
变量a和f标识了内存中的存储单元,求值在运算器中进行,求值过程不会影响这两个变量的类型和值。
有int a = 3;,float f = 2.3;,表达式a + f求值时,实际求值的两个是double型的3.0和2.3,求值后,变量a和f的类型和值改变了吗?
变量a和f标识了内存中的存储单元,求值在运算器中进行,求值过程不会影响这两个变量的类型和值。变量a的类型依然是int型,值为3,
变量f的类型依然是单精度,值为2.3。
7
三种规定类型转换的“优先级”
三种规定类型转换的“优先级”:long→unsigned long→double。
操作数中有浮点型时,用“double型运算器”求值,结果也是double型; 操作数中有unsigned long型时,用“unsigned long型运算器”求值,结果也是unsigned long型;其它情况下用“long型运算器” 求值。
有short a = 2, b = 3;,求表达式a +b的值和类型。
表达式中没有浮点型和unsigned long型,用 “long型运算器”求值,表达式的值为5,long型。
三种规定类型转换的“优先级”:long→unsigned long→double。
操作数中有浮点型时,用“double型运算器”求值,结果也是double型; 操作数中有unsigned long型时,用“unsigned long型运算器”求值,结果也是un