C#中Math.Pow((11/3),2)为何先执行除法而非指数运算?
C#运算顺序疑问解答
核心原因
你混淆了括号优先级规则、方法调用执行逻辑和算术运算符优先级规则的适用场景,具体说明如下:
- C#运算优先级的最高层级为括号包裹的表达式,任何被
()包裹的内容都会优先完成求值,再参与外层运算,这是优先级的基础约定。 - 方法调用的默认执行逻辑为:先对所有入参的表达式逐一完成求值,再将结果传入方法执行内部逻辑,因此
Math.Pow((11/3),2)天然会先计算两个入参的值,再执行指数运算。 - 你提到的「指数运算优先级高于除法」仅适用于同一层级、无括号包裹的算术运算符场景,比如表达式
11 / Math.Pow(3,2)就会先执行指数运算,再执行除法。 - 补充细节:C#中两个int类型值执行除法时默认走整数除法,
11/3的求值结果为3,因此你运行代码最终得到的是Math.Pow(3,2)的返回值9。
对应场景写法参考
如果需要实现「指数优先于除法」的运算逻辑,对应两种常见需求的写法如下:
- 计算11的平方除以3:
Console.WriteLine(Math.Pow(11, 2) / 3); - 计算11除以3的平方:
Console.WriteLine(11 / Math.Pow(3, 2));
内容的提问来源于stack exchange,提问作者Nicholas Spektor
相关产品推荐
相关产品推荐

