不同类型变量相加出现问题

int a=2*3;
float d=10;
float b=(d/3);
float c=0;
c=a+b;
printf("%f",c);

图片
第一行变量类型,全都是int
第二行变量类型全都是float
第三行的v类型是float H类型是int g类型是float
对应的是输出的情况右边图片对应

img


问题是
第一组代码,int 形式,+float形式,可以正常输出
为什么图片中的代码就不可以?会有丢失的情况

你应该复习float类型是如何二进制存储的相关知识
那么你应该知道,float类型的有效数字位数有限,只能支持6-7位有效数字(因为是二进制存储,而我们平时说的有效数字是10进制,除不开,所以在6-7之间)
而你原始数据两个有效数字都已经到达了8位
转存为float类型一定会造成有效数字丢失

没理解啊 这里你要注意的一些点是:
1:不同的类型做运算,有隐含的规则,以及与你设置的结构类型有关
2:你要注意你的运算结果,会不会与你定义的结果类型越界问题。

img

这个涉及到两个知识点,一个叫整形提升一个叫算数转换。
整形提升,char,short类型在表达式运算中会提升为int
算数转换,不同类型的表达式转换为"高"类型。
int->unsigned int ->long -> unsigned long->float ->double