C语言的类型转换,可以分为两种:自动类型转换(隐式类型转换,有编译器帮你去完成)和强制类型转换(你知道自己想要什么,所以才转换)。
对于自动类型转换,最常见的就是混合运算以及赋值运算,还有一种就是函数值的类型转换
- 赋值运算:自动把“=”右边的表达式的类型转换成“=”右边的变量的类型,例如 int a=4.5; a的值实际是4!
- 混合运算:就是一个运算表达式当中包含了多个类型,这时候就需要有类型转换。当运算符两边的操作数类型不同时,其中一个操作数就要经过类型转换以和另一个操作数的类型相一致,然后才能进行运算。
变换操作数采取就高不就低的原则,即级别低的操作数先被转换成和级别高的操作数具有同一类型,然后再进行运算,结果的数据类型和级别高的操作数相同。 - 函数返回值的类型转换: int f1(){ return 36.8;}
可以利用强制类型转换运算符将一个表达式转换成所需类型:
例如:
(double)a (将a转换成double类型)
(int)(x+y) (将x+y的值转换成整型)
(float)(5%3) (将5%3的值转换成float型)
数据类型转换:
自动转换顺序表高 double ←← float
↑ ↑
↑ long
↑ ↑
↑ unsigned
↑ ↑
低 int ←← char,short
自动转换规则:
a):浮点数赋值给整型,该浮点数的小树被舍去;
b):整数赋给浮点型,数值不变,但是被存取到相应的浮点型变量中;
强制类型转换形式: (类型说明符)(表达式)
.2f保留两位小数
%d,%f,%d,%c
getchar()方法输入一个字符串时
putchar()函数可以将int类型转换为char类型
下面给出类型转换的示例,以加深理解。设有如下变量说明:
int a, j, y; float b; long d; double c;
则对赋值语句:
y=j+'a'+a*b-c/d;
其运算次序和隐含的类型转换如下:
① 计算a*b,由于变量b为float型,所以运算时先由系统自动转换为double型,变量a为int型,两个运算对象要保持类型一致,变量a也要转换为double,运算结果为double型。
② 由于c为double型,将 d 转换成 double 型,再计算 c/d,结果为double型。
③ 计算j+'a',先将'a'(char型)转换成整型数再与j相加,结果为整型。
④ 将第1步和第3步的结果相加,先将第3步的结果(int)转换成double型再进行运算,结果为double型。
⑤ 用第4步的结果减第2步的结果,结果为double型。
⑥ 给y赋值,先将第5步的结果double型转换为整型(因为赋值运算左边变量y为整型),即将double型数据的小数部分截掉,压缩成int型,然后进行赋值。