【发布时间】:2017-06-29 20:14:56
【问题描述】:
int a=98, b=10;
float c;
c=a/b;
输出:c=9
我知道因为隐式类型转换,c 的值是 9 而不是 9.8 但后来我遇到了这个问题:
int a,b,c,d;
a=40;
b=35;
c=20;
d=10;
printf("%d",a*b/c-d);
输出:60
现在,如果我们看到方程的优先级是从右到左,并且根据 BODMAS 规则 b/c(35/20) 将首先执行,因此 35/20 = 1.75 然后隐式转换为整数使其变为 1,然后rest 将跟进答案必须为 30,但输出为 60,这是正确答案。你能解释一下为什么吗?
【问题讨论】:
-
什么是博德马斯规则? a*b 将首先执行
-
C 中 * 和 / 的运算符优先级是从左到右:en.cppreference.com/w/c/language/operator_precedence 所以
a*b将首先完成。相当于写((a*b)/c)-d。 (写为答案) -
是的,因为它是一个浮点数
-
参考BODMAS
-
@AntonH 这些都是有害的。看看社交媒体上的所有这些“圣战”,因为不了解这些东西。不使用这些首字母缩略词,记住规则真的不难。
标签: c type-conversion operator-precedence