【问题标题】:Preference for C# in adding, multiplication, and divisionC# 在加法、乘法和除法方面的偏好
【发布时间】:2014-07-31 13:21:14
【问题描述】:

C# 是如何执行的?

static void Main(string[] args)
    {

        int i = 4;

        i *= 4 + 8 / 2;
        Console.WriteLine(i);
    }

这是在面试问题之一中提出的。我将 BODMAS 应用到它上面。 但这是错误的。请解释一下。

【问题讨论】:

  • 您是否尝试过编写程序来测试它?
  • 这里的乘法和除法在赋值运算符的不同方面 - 我怀疑这就是导致你问题的原因......你的答案是什么,为什么?你观察到的实际结果是什么?
  • 你认为正确的答案是什么?最好是 32 岁...
  • 我认为你不再参加面试了?打开你的IDE,设置一个断点,一次通过一个F11
  • 在他们问你是否有任何问题的采访结束时,你应该问一下 7 月份一只满载的非洲燕子的平均重量是多少。

标签: c# division multiplication addition operation


【解决方案1】:

它会等效于下面的代码执行:

int i = 4;
int temp = 8 / 2;
temp = 4 + temp;
i = i * temp;

编译器会缩短它,因为它可以计算i *=右边的常数,所以实际上它会编译成这样:

int i = 4;
i *= 8;

【讨论】:

  • 可能 (i*temp) 本身也是一个 temp。
  • 这取决于你所说的 temp 的意思,但在 IL 代码中它会暂时驻留在堆栈中。
  • 这就是我的意思。它将再次保存在临时变量中并分配给 i.
  • @LasseV.Karlsen,所以这意味着实际上 C# 也遵循 BODMAS 规则。 `int i = 4;我 *= 4 + 8 / 2 * 4; Console.WriteLine(i);` 它在 c# 中给出的结果为 80。也符合 BODMAS 规则。
  • 结果是 32,而不是 80。*= 最后执行,因为它是赋值运算符,而不是乘法。
【解决方案2】:

i *= 4 + 8 / 2 被执行为:

i = i * (4 + (8 / 2))

这是正确的阅读方式。

【讨论】:

    【解决方案3】:

    运算符的优先级在这一点上非常明确:/ 是乘法运算符,首先应用,然后是 +。 *= 是一个赋值运算符,最后应用。

    所以:

    8 / 2 = 4
    4 + 4 = 8
    i *= 8;
    so i will be 4 * 8 = 32;
    

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多