在加法、乘法和除法中优先使用C#
C#如何执行这一点在加法、乘法和除法中优先使用C#,c#,division,multiplication,addition,operation,C#,Division,Multiplication,Addition,Operation,C#如何执行这一点 static void Main(string[] args) { int i = 4; i *= 4 + 8 / 2; Console.WriteLine(i); } 这是在一个采访问题中提出的。我把博德马斯应用到它上面。 但这是错误的。请解释。它的执行等同于以下代码: int i = 4; int temp = 8 / 2; temp = 4 + temp; i = i * temp; 编译器将缩短它
static void Main(string[] args)
{
int i = 4;
i *= 4 + 8 / 2;
Console.WriteLine(i);
}
这是在一个采访问题中提出的。我把博德马斯应用到它上面。
但这是错误的。请解释。它的执行等同于以下代码:
int i = 4;
int temp = 8 / 2;
temp = 4 + temp;
i = i * temp;
编译器将缩短它,因为它可以计算i*=
右侧的常数,所以实际上它将编译为:
int i = 4;
i *= 8;
i*=4+8/2执行为: i=i*(4+(8/2))
这是正确的阅读方法。运算符的优先级在这一点上非常清楚:是一个乘法运算符,首先应用/,然后应用+。*=是赋值运算符,最后应用 因此:
你试过写一个程序来测试它吗?乘法和除法在赋值运算符的不同侧面-我想这就是导致你出现问题的原因。。。你的答案是什么?为什么?你观察到的实际结果是什么?你认为正确的答案是什么?最好是32岁……我想你不在面试了吧?打开你的IDE,设置一个断点,在面试结束时一次通过一个F11,他们会问如果你有任何问题,你应该问7月份一只非洲燕子的平均体重是多少。may be(i*temp)本身也是一个temp。这取决于你所说的temp是什么意思,但在IL代码中,它将临时驻留在堆栈上。这就是我的意思。它将再次被保存在temp变量中,并在之后分配给i.@LasseV.Karlsen,因此这意味着实际上C#也遵循BODMAS规则int i=4;i*=4+8/2*4;Console.WriteLine(i);`它给出的结果是c#中的80。根据BODMAS法则,结果是32,而不是80<代码>*=最后执行,因为它是赋值运算符,而不是乘法。
8 / 2 = 4
4 + 4 = 8
i *= 8;
so i will be 4 * 8 = 32;