隐式类型转换
发生的情况:
1.运算符转换
(1)运算转换规则
把不同数据类型混合运算时,不同类型数据参与运算时先自动转换为同一类型
(2)为什么需要类型转换 ,便于硬件的实现
(3)类型转换
规则一
char、short自动转换为int,float自动转换double
结果类型与转换后的类型相同
规则二
相同类型(除char,short,float型外)的操作数 作运算的结果为同一类型
规则三
不同类型,先按规则一转换,还有不同类型,则 再按低级别转换为高级别,其结果类型与转换后的类型相同
(4)各类型的级别高低
char<short <=unsigned<=long<=unsingned long<float<double
若整数,双目运算符两边一个是有符号的一个是无符号的,同类型则结果为无符号的
注意:unsigned char,unsigned short会转换为int
2.赋值转换
(1)把一个值赋给与其类型不同的变量时
赋值号右边类型转换为左边类型
同类型,无符号与有符号之间赋值,相当于把等号左边内存拷贝到右边内存
(2)长的赋给短的类型
把长的类型地位,拷贝给短的类型
(3)短的赋给长的类型
根据短的类型是否为有符号
有符号,符号位扩展到长类型的宽度,然后赋给长整型
无符号高字节填零,赋给长整型
3.输出转换
输出时转换为指定的类型格式
printf会把char,short提升到int型,在传给printf,float提升到double类型再传给printf
4.函数调用转换
实参与形参类型不一致时转换
强制类型转换
1.一般形式(类型名)(表达式)
2.例
(int)(x+y)
(int)x+y
(double)(3/2)
(int)3.6
说明:强制 转换得到所需类型的中间变量(即结果类型转变为所需的变量),原变量类型不变