数学运算未返回预期结果

ded*_*krz 1 c math integer-division

我正在使用一个函数,但代码不起作用。我将函数分解为几个部分,并尝试自己了解发生了什么。我懂了:

int res;
res = (1 / 2) * 2 + 2;
printf("%d", res);
Run Code Online (Sandbox Code Playgroud)

自己算算:

(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);
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*tos 5

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

你可以尝试输入它

float res;
res = (float)1/(float)2 * 2 + 2;
printf("%f", res);
Run Code Online (Sandbox Code Playgroud)

它将强制结果为浮点结果 (0.5),这将得出正确的答案