C#中的运算符优先级

时间:2010-07-19 09:59:20

标签: c# operator-precedence

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

相当于

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

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

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

8 个答案:

答案 0 :(得分:12)

根据§7.2.1,

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

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

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

答案 1 :(得分:3)

优先规则真的很难记住,所以我也更喜欢使用括号来消除歧义。我尝试遵循建议“先为人们编写代码,然后再为计算机编写代码”。但是,有一个有趣的助记符(我从布鲁斯·埃克尔的书中学到的)要记住(某些)规则:“溃疡成瘾者真的很喜欢C ”:

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

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

答案 2 :(得分:2)

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

修改

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

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

答案 3 :(得分:1)

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

PS:尽可能用float替换double

答案 4 :(得分:1)

请参阅C#语言规范:Operator precedence and associativity

答案 5 :(得分:0)

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

答案 6 :(得分:0)

是的,两者都是等价的。

两者都将使用浮点除法。

答案 7 :(得分:0)

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