C语言算术运算规则疑问:整数除法结果不符数学预期求解
C语言整数除法与运算逻辑解析
1. 整数除法的核心规则
C语言里,两个整数类型(比如int)做除法时,会直接截断小数部分,只保留整数商,完全不会四舍五入:
- 你代码里
i=2、j=3,i/j的数学结果是0.666...,但整数除法后直接变成0; j/i的数学结果是1.5,整数除法后变成1。
2. 运算符的执行顺序
/和*的优先级相同,运算遵循左结合(从左到右依次计算):
- 对于
k = i/j*j:先算i/j得到0,再用0乘j,最终结果是0,这就是为什么和你预期的数学结果2不一样; - 对于
l = j/i*i:先算j/i得到1,再用1乘i,最终结果是2。
3. 浮点类型赋值的误区
虽然a、b是float类型,但i/j、j/i的运算还是在整数之间完成的,得到整数结果后才会自动转为浮点类型赋值:
a = i/j*j:先得到整数0,再转为0.0f;b = j/i*i:先得到整数2,再转为2.0f。
想要得到数学上的正确结果?
只要把其中一个操作数强制转为浮点类型,就能触发浮点除法:
// 示例:将i转为float,让整个运算以浮点规则执行 float correct_result = (float)i / j * j; // 此时结果就是2.0f
内容的提问来源于stack exchange,提问作者Mohammad Ali
相关产品推荐
相关产品推荐

