C语言中两种除法写法结果不同的原因是什么
两段C语言除法代码结果差异的核心原因
C语言中除法运算符/的执行逻辑由两侧操作数的类型决定:
- 当两侧操作数均为整数类型时,执行整数除法,运算结果直接舍弃小数部分,仅保留整数位
- 当两侧至少有一个操作数为浮点类型时,执行浮点除法,运算结果会保留完整的小数部分
第一段代码输出3.00的原因
第一段代码中15和4都是int类型的字面量,运算时会优先执行整数除法得到int类型的结果3,后续才会将该整数结果转换为float类型赋值给变量a,所以最终a的实际值为3.0,格式化输出后就得到3.00的结果。
核心逻辑等价于:
// 实际执行顺序 int temp = 15 / 4; // temp = 3 float a = (float)temp; // a = 3.0f
第二段代码输出正确结果的原因
第二段代码中参与除法运算的a和b均为float类型变量,/会触发浮点除法逻辑,直接计算得到完整的浮点结果3.75,赋值给res后输出就符合预期。
如果希望第一种写法也得到正确结果,只需将任意一个操作数改为浮点字面量即可,示例:
float a = 15.0 / 4; // 或 float a = 15 / 4.0f;
内容的提问来源于stack exchange,提问作者Mac
相关产品推荐
相关产品推荐

