C语言中,CPU只能对相同类型的两个操作数进行算术运算。如果两个数作数的类型不同,就需要进行类型转换(type casting)。
数据类型转换分为隐式类型转换和显式类型转换。
1.隐式类型转换
编译器自动进行的类型转换,常发生在赋值操作或表达式求值时。
(1)赋值时的转换
#include<stdio.h>
int main(){
double d;
int i;
i = 3.14; //隐式类型转换,将浮点数值3.14转换为int型
d = i; //隐式类型转换,将int类型的i转换为double类型的值
printf("%f\n", d);
d = 3.14;
i = d; // 隐式类型转换,将double类型的d转换为int类型的值
printf("%d\n", i);
return 0;
}
(2)表达式求值时的转换
在表达式求值时,整型会自动向浮点型转换。这很好理解,整型转换为浮点型不会丢失信息,而浮点型转换为整型会丢弃小数部分。
#include<stdio.h>
int main(){
double d = 2/3;
printf("%f\n", d);
d = 2.0/3; //隐式类型转换,将int型的3转换为double型
printf("%f\n", d);
return 0;
}
当double类型的2.0与int类型的3进行除法运算时,编译器会自动将int类型的3转换为double类型,再与2.0进行运算。
2.显式类型转换
显式类型转换,也称为强制类型转换,需要程序员明确指定要转换的目标类型。通常使用类型转换运算符()来完成。方法是在值或者变量前加带小括号的数据类型名(如“(int)”),即可将变量转换为指定的数据类型。
#include<stdio.h>
int main(){
double d = 3.14;
int i;
i = (int)d; //显式类型转换,将double类型的d转换为int类型的值
printf("%d\n", i);
return 0;
}
注意括号只能加在类型名上,即只能写成(int)d,不能写成int(d)。