C语言中为何从float隐式转换为int而非反向转换?
问题解析:为什么变量a和b最终都是整数?
先明确代码的执行顺序:赋值运算符=是右结合的,所以a = b = 3.4会先执行b = 3.4,再把b的值赋值给a。
第一步:b = 3.4的转换逻辑
- 字面量
3.4在C语言中默认是double类型。当把double类型的值赋值给int类型变量b时,会触发隐式截断转换——直接丢弃小数部分,只保留整数部分,所以b最终的值是3(整数)。 - 这里要注意:赋值操作的转换规则是「右边的值转换为左边变量的类型」,不是自动往更高精度转。你之前理解的“转成更高精度”是算术运算中的规则,和赋值场景不同。
第二步:a = b的转换逻辑
- 此时
b是int类型的3,赋值给float类型的a时,int会被转换为float类型,3转成float后是3.0,所以a的值是3.0,表现为整数形式。
总结:整个过程中,先把3.4截断为int赋值给b,再把int类型的3转为float赋值给a,最终两者的结果都是整数形式。
内容的提问来源于stack exchange,提问作者Mai Ehab
相关产品推荐
相关产品推荐

