整型、实型、字符型数据间可以混合运算
1.自动转换
发生自动转换的情况:
- 运算转换------不同类型数据混合运算时
- 赋值转换------把一个值赋给与其类型不同的变量时
- 输出转换------输出时转换成指定的输出格式
- 函数调用转换------实参与形参类型不一致时转换
1.1.运算转换规则:
不同类型数据运算时先自动转换成同一类型
基本规则:
- 字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。
- short型转换为int型(同属于整型) 。
- float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 。
具体规则如下图所示:
例如:
char ch; int i; float f; double d;
在进行下面计算时候
ch/i+f*d-(i+f)
会内部准换成这样
最后得到一个double类型的结果。
同理下面例子也是一样
2.强制转换
一般形式:(类型名)(表达式)
例:
(int)(x+y) // 准换 x+y (int)x+y // 只转换x (double)(3/2) (int)3.6
※※※ 说明 ※※※:强制转换得到所需类型的中间变量,原变量类型不变(也就是说强制准换之后不影响本身数据的类型,只是得到一个准换后的结果)。
2.1.例如
#include <stdio.h> int main() { float x; int i; x = 3.6; i = (int)x; printf("x = %f, i = %d", x, i); return 0; }
结果输出
x = 3.600000, i = 3 • 1
另外,较高类型向较低类型转换时可能发生精度损失问题,上面例子也体现出来了。