【问题标题】:Implicit data type conversion in C [duplicate]C中的隐式数据类型转换
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    所以你的执行将遵循从左到右执行/*

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多