上次课内容,
算术运算
1、双元运算
2、自反算术赋值运算符
3、自加和自减运算
4、正负号运算符
5、赋值类运算符的副作用
关系、逻辑与条件运算
1、关系运算
2、逻辑运算
3、条件运算
练习,
练习,
1,main()
{
int x=2,y,z;
x*=3+2;printf(“%d \n”,x);
x*=y=z=4;printf(“%d \n”,x);
x=y=1;
z=x++-1;printf(“%d,%d \n”,x,z);
z+=-x+++(++y);printf(“%d,%d \n:,x,z);
}
结果,
10
40
2,0
3,0
表达式值
1 (1) 1<4&&4<7
0 (2) 1<4&&7<4
1 (3) !(2<5==5)
1 (4) !(1<3)||(2<5)
0 (5) !(4<=6)&&(3<=7)
main()
{
int i=1;
printf(“%d,%d,%d \n”,i++,i++,i++);
}
结果,
3,2,1
本课内容,
不同数据类型间的转换
教学目的,
1、掌握相关概念;
2、明确数据类型转换关系隐式和显示转换方法。
重点,
数据类型的转换
难点,
显示转换方法,隐式转换规则。
一、概念
转换的三种形式,
( 1)、同类型但长度不同的数据间转换
( 2)、定点方式与浮点方式之间的转换
( 3)、整型数中的有符号格式与无符号格式之间转换
1、提升与降格
数据提升:由低级数据转换为高级数据。
( 1)、短 ?长
( 2)、整 ?浮
数据降格:由高级转为低级。
( 1),长 ?短
( 2)、浮 ?整
同长度的整数带符号与不带符号的,属同一级别。
2、符号位扩展与零扩展
符号位扩展,signed型的整型提升为较长的 signed型时,增加的长
度中各位状态与原来较短的符号位相同。 P39— 图 2.6
零扩展,unsigned型扩展为较长的整型数时,增加的位全部置 0。
P39_图 2.6
3、最高位失去符号功能与变为符号位(同长度)
signed型转 unsigned型,原符号位作为数据的一部分。
4、截去小数与四舍五入
实数转整数,小数部分舍去,按整数形式保存,实数的整数部分
不能超出整型数的最大范围。
( -32768~32767)
float(double)?int 舍小数部分
double?float 去掉多余有效数字,四舍五入。
16位 6位
5、丢失精度
转换的四舍五入截小数位,会丢失精度
6、结果不确定与截去高位
降格时,数据值超出目标类型的范围,结果将不确定。
P40_2.11
二、不同类型数据的隐式转换
转换
运算转换:为使表达式中的各运算量具有同的类型而进行的数据类
型转换。
赋值转换:一个值赋给与其不同类型的变量。
输出转换:输出时转换为指定的格式。
函数调用转换:函数调用时,形参与实参类型不一致而进行的转换。
1、一般算术转换
算术转换(运算符转换)
目的,( 1)将短的数扩展成机器处理的长度。
( 2)使运算符两端具有共同的类型。
转换原则:( 1) char,short?int float ?double P40_P41
(2)运算符两端类型不一致时,“向高看齐”
Char,short?int ?unsigned?long?double
float
隐式(自动转换)
显式(强制转换)
2、赋值转换
赋值号右侧表达式的值类型转为左边变量类型。(右升可降)
3、输出转换
数据按指定格式输出。
注意,负数 ?无符号数 符号位作为数值的一部分
长整 ?短整 超范围时,输出以 32768为模的余数
实型 ?整型 超出整数最大范围时同上。
P41~42
三、不同类型的显式转换
通过显式转换符对类型强制转换
格式:(类型标识符)表达式
如,P42~43
注意:显式转换 后,对原来变量类型不改变。
小结,
1、概念
2、隐式转换
3、显式转移
作业,
P53~54
2.16,2.18,2.19