类型转换分类
1) 隐式转换(也称为自动转换)
例:float a = 23.4f;
int b = 10;
printf("%d",a + b);//有警告结果是1606416392
正确做法:int result = a + b;
printf("%d",a + b);//无警告,结果是33
原因:float + int 这是可以运行的,int会自动转换为float,即10-->10.0f
然后float又转换成int型。舍弃了小数位。
如:float c = a + b;
printf("%f",a + b);//结果33.400002(有效位是7位,其他的无效)
2) 显式转换(强制类型转换)
printf("%d", (int)(a + b));//无警告,结果为:33
3) 转换规则
double ←── float 高
↑
long
↑
unsigned
↑
int ←── char,short 低
4) 注意事项
1)用一个大数加上一个特别小的数,如果使用单精度的float,那么会有问题(造成数据丢失),因为float的有效位只有7位
int num = 3333;
float a = 0.000003;
printf("%f",num + a); //结果为3333.000000
2)强制类型转换是临时转换
float a = 23.4f;
printf("a d= %d", (int)a);//此处是临时转换,不会改变原值
printf("a f= %f", a);//打印结果:23.400000
|
|