【问题标题】:Order of operations c#操作顺序 c#
【发布时间】:2018-11-10 08:36:05
【问题描述】:

我很难理解为什么下面会返回这个值。任何帮助将不胜感激。

int ans = 10, v1 = 5, v2 = 7, v3 = 18;
ans += v1 + 10 * (v2-- / 5) + v3 / v2;
Console.WriteLine(ans);// prints 28

我的想法首先是括号,除法,乘法,然后是加法。所以步骤是: v1 + 10 * (v2-- / 5) + v3 / v2

  1. (v2-- / 5)= 1.4,然后将 v2 设置为 6。
  2. v3 / v2 = 3
  3. 10 * (v2-- / 5) = 14
  4. 5 + (14) +(3) = 12

因此,(ans += 12) = 22?

【问题讨论】:

  • 我见过这个,但我不确定我哪里出错了。就该表而言,我的逻辑不正确吗? :msdn.microsoft.com/en-us/library/2bxt6kc4.aspx
  • 你的第一个假设是不正确的。 ?(v2-- / 5) = 1 而不是 1.4,因为它会产生一个整数结果
  • 所以你实际上只剩下10 += 5 + 10 * 1 + 3 = 10 += 5 + 10 + 3 = 28
  • 谢谢马丁。应该已经调试了... X_X

标签: c# operator-precedence


【解决方案1】:

v2-- / 5)= 1.4 是你的问题。整数除法将永远返回非整数值。

1/2 等于 0,而不是 0.57/5 等于 1,而不是 1.4

【讨论】:

    【解决方案2】:

    Martin:步骤 1 不正确,因为两个变量都是整数,结果将是整数,(v2-- / 5) = 1。要得到 1.4 的答案,需要将变量更改为 double 类型。 “所以你实际上剩下 10 += 5 + 10 * 1 + 3= 28”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多