C语言是灵活的,在一个语句中允许不同的数据混合运算。而计算机是机械的,在进行算术运算时要求数据类型具有相同的大小和存储方式。为了处理这种矛盾,需要将被操作的数据进行类型转换。
自动类型转换
一个表达式中出现不同类型的混合运算时,较低类型将自动向较高类型转换。
一般情况下,数值的取值范围越大、精度越高,类型就越高
栗子:
一、当操作数含有浮点型时,都将转换为浮点型:
int i = 12;
double j = 3.14;
i + j;
printf("%lf\n",i+j); /*输出结果为15.140000*/
二、赋值运算符两侧类型不一致时,右侧类型升/降为左侧类型。
int ii;
ii = 3.14; /*左侧为整型,右侧为浮点型,右侧降为左侧类型,舍弃小数*/
printf("%d\n",ii); /*输出结果为3*/
三、右侧数值超出左侧类型取值范围时,将右侧数值高位截断,取低位的值输出,无意义。
char c; /*char型占一个字节,取值范围为-127~128*/
c = 1025;
printf("%d",c); /*警告超出范围,输出1,无意义*/
强制类型转换
C语言提供了可显示指定类型转换的语法,称为强制转换。
强制转换的格式为:(转换类型) 表达式;
int main()
{
int a,b;
a = 4;
b = 3;
double c;
c = a/b; /*因为a和b都是整型,a/b也是整型*/
printf("%lf\n",c); /*输出结果为1*/
c = (double)(a/b); /*a/b依然是1,然后再将1转换为double类型*/
printf("%lf\n",c); /*输出结果为1.000000*/
c = (double)a/b; /*先将a强制转换为double类型,再根据自动转换类型规则,b升为double类型*/
printf("%lf\n",c); /*输出结果为1.333333*/
}