原标题:C语言—类型之间的转换
当混合不同类型的数据进行计算时,便会发生类型转换。
当不同类型的数据进行计算时,应首先将操作数转换成相同的数据类型,然后再进行计算。
类型转换有两种形式,即隐式类型转换和显示类型转换。
隐式类型转换
所谓隐式类型转换就是在编译时由编译器程序按照一定规则自动完成,而不需要人为的干预。因此,在表达式中如果有不同类型的数据参与同一运算时,编译器就在编译时自动按照规定的规则将其转换为相同的数据类型。
C语言规定的转换规则是由低级向高级转换。例如,如果一个运算符带有两个类型不同的操作数时,那么在操作之前先将较低的类型转换为较高的类型,然后进行运算,运算结果是较高的类型。更确切地说,对于每一个算术运算符,都遵循如图所示的规则。
当整型数据和双精度数据进行运算时,先将整型数据转换成双精度型数据,再进行运算,结果为双精度类型数据。
当字符型数据和实型数据进行运算时,C先将字符型数据转换成实型数据,然后进行计算,结果为实型数据。
注意:在赋值语句中,如果赋值号左右两端的类型不同,则将赋值号右边的值转换为赋值号左边的类型,其结果类型还是左边类型。
也可以将图3-3所示的规则用图3-4表示。图3-4中的水平箭头表示必定转换,纵向箭头表示两个操作对象类型不同时的转换方向。
下面举例说明类型转换的规则。例如执行:
float x;
x = 100 + 3.1415926
会按如下步骤进行处理:首先将整型100转换为double型,然后进行运算,其结果为double型。最后将表达式的结果转换为float并赋给x。
显式类型转换
显示类型转换又叫强制类型转换,它不是按照前面所述的转换规则进行转换,而是直接将某数据转换成指定的类型。这以在很多情况下简化转换。例如,
int i;
i = i + 9.801;
按照隐式类型转换处理方式,在处理i=i+9.801时,首先整型i转换为double型,然后进行相加,结果为double型,再将double型转换为整型赋给i。
int i;
i = i + (int)9.801;
这时直接将9.801转换成整型,然后与i相加,再把结果赋给i。这样可把二次转换简化为一次转换。
显示类型转换的方法是在被转换对象(或表达式)前加类型标识符,,类型标识符用小括号括起来,其格式是:
(类型标识符)表达式
例如,有如下程序片段:
int main()
{
int a = 1;
int b = 0;
float c = 1.8f;
b = a + (int)c;
printf("b=%d\n",b);
return 0;
}
在上述程序的运行过程中,在执行语句b=a+int(c)时,将c的值临时强制性转化为int型,但变量c在系统中仍为实型变量,也就是说,强制类型转换不会改变变量的原值,这一点很重要,不少初学者忽略了这个问题。
责任编辑: