【问题标题】:Math operation doesn't return expected result数学运算不返回预期结果
【发布时间】:2026-02-22 20:30:01
【问题描述】:

我正在使用一个函数,但代码不起作用。我将功能分解为各个部分,并试图了解自己发生了什么。我得到了这个:

int res;
res = (1 / 2) * 2 + 2;
printf("%d", res);

自己计算:

(1 /2) = 0.5

0.5 * 2 = 1

1 + 2 = 3

(1 / 2) * 2 + 2 = 3,对吗?

但是,当我运行代码时,它给我的输出是“2”,而不是“3”。

当我尝试这个时:(将 '(1 / 2)' 变为 '0.5')

int res;
res = 0.5 * 2 + 2;
printf("%d", res);

我得到了“3”的预期输出,这很奇怪,因为上面的示例在理论上与下面的示例相同。这是否与我的编译器不知道简单的数学优先级规则有关?

【问题讨论】:

  • 1 / 2 返回一个整数结果,等于1 >> 1,即0
  • 如果希望除法返回浮点结果,则需要使其一个或两个参数都具有浮点类型。所以,1. / 21 / 2.1. / 2.
  • 这能回答你的问题吗? What is the behavior of integer division?

标签: c math integer-division


【解决方案1】:

1/2实际上试图返回一个整数结果(0),乘以2也是0。

您可以尝试进行类型转换

float res;
res = (float)1/(float)2 * 2 + 2;
printf("%f", res);

它将强制结果为浮点结果(0.5),这将导致正确答案

【讨论】: