C中的隐式数据类型转换

时间:2017-06-29 20:14:56

标签: c type-conversion operator-precedence

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然后休息将跟进答案必须是30但输出是60这是正确的答案。你能解释一下为什么吗?

2 个答案:

答案 0 :(得分:1)

C中*/中C的运算符优先级是从左到右:http://en.cppreference.com/w/c/language/operator_precedence

首先完成a*b。这相当于写((a*b)/c)-d

答案 1 :(得分:0)

因此,您的执行将遵循从左到右执行/*

((40 * 35) / 20) - 10 = ((1400) / 20) - 10 = (70) - 10 = 60