C#中的运算符优先级

(int)(int1 / (float)var2.Count() * 100) 

相当于

 (int)((int1 / (float)var2.Count()) * 100) 

…它会使用浮点数还是整数除法?

编辑…如果上面的答案是肯定的,那么在这里执行浮点除法有什么好处?

/*具有相同的运算符优先级,在§7.2.1下,因此两个结果应该相同(使用float规则)。

但是,我不能为学习优先级表而烦恼; 我只是使用括号。 然后它可以使用任何语言,而无需记住它。

另一个重要的问题是最终(int)演员的四舍五入:你是否期望这是“向上”,“向下”或“银行家”?

优先规则真的很难记住,所以我也更喜欢使用括号来消除歧义。 我尝试遵循建议“先为人们编写代码,然后再为计算机编写代码”。 但是,有一个有趣的助记符(我从Bruce Eckel的书中学到的)要记住(一些)规则:“ Ulcer Addicts真的很像CA很多 ”:

 Ulcer - Unary (+, -, ++, --, !) Addicts - Arithmetic (and shift) (+, -, *, /, %, <<, >>) Really - Relational (<, >, ==, <=, >=, !=) Like - Logical (and bitwise) (&&, ||, &, |, ^) C - Conditional ( ? : ) <- this is the conditional ternary operator A lot - Assignment ( =, *=, +=, ...) 

它并不完美,按位运算符被挤入,我们必须知道乘法运算符(*,/,%)优先于加法运算符(+, - )。

它们是等价的,它将使用浮点除法。 即使乘法首先发生,也会使用浮点除法,因为int除以float * int的结果,即浮点数。

编辑:

如果上面的答案是肯定的,那么在这里执行浮点除法有什么好处?

这是一个优势吗? 你要考虑的第一件事是它是否正确,因为结果会有所不同。 从代码判断,你似乎在试图计算一些百分比。 使用整数除法时,如果“int1”始终小于var2.Count(),则结果将始终为0,这可能不是您想要的。

我会说是的,除法和乘法应该是从左到右。 因此它是一个浮动部门。

PS:尽可能用double替换float

请参阅C#语言规范: 运算符优先级和关联性 。

一样的。 两者都将使用浮动分割。

是的,都是等价的。

两者都将使用浮点除法。

整数除法只会给出答案的整个部分,即3/2将为1而浮点除法将给出1.5