数学运算未达到 return 预期结果
Math operation doesn't return expected result
我正在使用函数,但代码无法运行。我将这个功能分解成几个部分,并试图了解我自己发生了什么。我明白了:
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
实际上试图return一个整数结果(0),乘以2也是0。
您可以尝试对其进行类型转换
float res;
res = (float)1/(float)2 * 2 + 2;
printf("%f", res);
它将强制结果为浮点数结果 (0.5),这将导致正确答案
我正在使用函数,但代码无法运行。我将这个功能分解成几个部分,并试图了解我自己发生了什么。我明白了:
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
实际上试图return一个整数结果(0),乘以2也是0。
您可以尝试对其进行类型转换
float res;
res = (float)1/(float)2 * 2 + 2;
printf("%f", res);
它将强制结果为浮点数结果 (0.5),这将导致正确答案