You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C语言中两种整数运算顺序的截断表现不一致?

差异原因说明

这个表现和现代C版本的新特性没有任何关系,是C语言从最早的K&R C时期就明确规定的整数运算规则、运算符优先级与结合性导致的,核心逻辑如下:

  • C语言中*、/运算符优先级相同,结合方向为从左到右
  • 两个int类型操作数参与运算时,返回值也为int类型,整数除法会直接舍弃小数部分向零截断

第一种写法 cels = (fahr - 32) * 5 / 9;

运算顺序严格按照从左到右执行:

  1. 先计算括号内的fahr - 32,得到int类型的温度差值
  2. 用差值先乘以5,得到放大后的int类型结果
  3. 最后用该结果除以9,此时的整数截断只会舍弃最终结果的小数部分,和K&R推荐的5 * (fahr - 32) / 9逻辑完全等价,不会出现整体结果异常的问题。

第二种写法 cels = 5 / 9 * (fahr - 32);

同样按照从左到右的顺序执行:

  1. 优先计算5 / 9,两个操作数都是int,整数除法结果直接截断为0
  2. 0再乘以任意整数结果都为0,就出现了你观测到的异常截断问题。

注意:只有当除法操作涉及的两个数都是整数时才会触发整数截断规则,如果要避免该问题,可以将其中一个操作数强制转为浮点类型,比如写成cels = 5.0 / 9 * (fahr - 32);就可以得到正确结果。

内容的提问来源于stack exchange,提问作者airismything

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:18:04