数据类型转换数据类型转换就是将数据(变量、值、表达式的结果等)从一种类型转换为另一种类型.自动类型转换自动类型转换是编译器默默地、隐含地、秘密地进行的数据类型转换。这种转换不需要程序员干预,会自动发生。1)当将一种类型的数据赋值给另一种类型的变量时,会发生自动类型转换。例如:floatf=100;100是int型数据,需要先转成float型才能赋值给变量f。另一个例子:intn=f;f是float类型的数据,需要转换成int类型才能赋值给变量n。在赋值操作中,当赋值数两边的数据类型不同时,需要将右边表达式的类型转换为左边变量的类型,这可能会造成数据失真(不一致)数据输入和输出),或降低精度;所以,自动类型转换不一定安全。对于不安全的类型转换,编译器一般都会给出警告。在不同类型的混合运算中,编译器也会自动进行数据类型的转换,将所有参与运算的数据先转换为同一类型,再进行计算。转换规则如下:按数据长度递增的方向进行转换,保证值不失真或不降低精度。比如涉及到int和long运算时,先把int类型的数据转换成long类型再进行运算。所有浮点运算均以双精度执行。即使运算中只有float类型,也必须转为double类型才能进行运算。char、short参与运算时,必须先转为int类型。自动类型转换示例:#includeintmain(){floatPI=3.14159;ints1,r=5;doubles2;s1=r*r*PI;s2=r*r*PI;printf("s1=%d,s2=%f\n",s1,s2);return0;}运算结果:s1=78,s2=78.539749计算表达式r*r*PI时,r和pi都转为double类型,expression公式的结果也是double类型。但是由于s1是整数,所以赋值运算的结果仍然是整数,小数部分被舍弃,导致数据精度损失。强制类型转换自动类型转换是编译器根据代码上下文自行判断的结果。有时它并不那么“聪明”,不能满足所有要求。如果有必要,程序员也可以在代码中自己显式地提出类型转换,这叫做强制类型转换。强制类型转换的格式为:(type)expressiontype为目标类型的名称,expression为表达式。例如:(float)a;//将变量a转换为float类型(int)(x+y);//将表达式x+y的结果转换为intinteger(float)100;//将值100(Thedefaultisinttype)Converttofloattype下面是一个典型的需要强制类型转换的例子:#includeintmain(){intsum=315;//totalintcount=7;//numberdoubleaverage;//Average=(double)sum/count;printf("Averageis%lf!\n",average);return0;}output:Averageis44.714286!sum和count都是int类型,如果不干预,那么sum/count的运算结果也是int类型,小数部分会被舍弃;平均值虽然是double型,可以接收小数部分,但是能量不足,小数部分被提前“阉割”,只能接收整数部分。这导致除法运算的结果严重失真。既然average是double类型,为什么不充分利用它,努力提高运算结果的精度呢?要达到这个目的,我们只需要将sum或count其中之一转换为double类型即可。在上面的代码中,我们将sum转为double类型,这样sum/count的结果也会变成double类型,并且可以保留小数部分,average接收到的值会更加准确。注意不要写成(double)(sum/count),这样写出来的运算结果会是44.000000,不能保留小数部分。好了,C语言类型转换的介绍到此结束。可以先练习一下,后面再介绍复杂的例子。