C#中有一个指数运算符吗?

例如,是否存在一个操作符来处理?

float Result, Number1, Number2; Number1 = 2; Number2 = 2; Result = Number1 (operator) Number2; 

在过去, ^运算符已经成为其他语言的指数运算符,但在C#中它是一个按位运算符。

我是否必须编写循环或包含其他名称空间来处理指数运算? 如果是这样,我该如何处理使用非整数的指数运算?

C#语言没有电力运营商 。 但是,.NET Framework提供了Math.Pow方法:

返回一个指定的数字,以指定的权力。

所以你的例子看起来像这样:

 float Result, Number1, Number2; Number1 = 2; Number2 = 2; Result = Math.Pow(Number1, Number2); 

MSDN上有一篇关于为什么 C#团队中不存在指数运算符的博客文章 。

在语言中添加一个强大的操作符是可能的,但是在大多数程序中执行这个操作是相当less见的事情,当调用Math.Pow ()很简单时,添加一个操作符似乎不合理。


你问:

我是否必须编写循环或包含其他名称空间来处理指数运算? 如果是这样,我该如何处理使用非整数的指数运算?

Math.Pow支持双参数,所以不需要你自己编写。

我偶然发现这个post,在我的代码中使用科学记数法,我用过

 4.95*Math.Pow(10,-10); 

但事后我发现你可以做

 4.95E-10; 

只是以为我会join这个在任何人在类似的情况下,我在。

我很惊讶没有人提到过这一点,但是对于简单的(也许是最常遇到的)平方的情况,你只是乘以自己。

 float Result, Number1; Result = Number1 * Number1; 

在寻找一种新的语言来将我们的计算软件转换成好的vb6的时候,缺乏C#的指数运算符对我们来说是一个很大的烦恼。

我很高兴我们用C#去了,但是当我写一个包括指数的复数方程的时候,它仍然让我很烦恼。 Math.Pow()方法使得方程很难读取IMO。

我们的解决scheme是创build一个特殊的DoubleX类来覆盖^ -operator(见下文)

只要你声明至less一个variables为DoubleX,就可以很好地工作:

 DoubleX a = 2; DoubleX b = 3; Console.WriteLine($"a = {a}, b = {b}, a^b = {a ^ b}"); 

或在标准双打上使用显式转换器:

 double c = 2; double d = 3; Console.WriteLine($"c = {c}, d = {d}, c^d = {c ^ (DoubleX)d}"); // Need explicit converter 

这种方法的一个问题是,与其他操作符相比,指数的计算顺序是错误的。 这可以通过总是在操作周围添加一个额外的()来避免,这又使得读取方程有点困难:

 DoubleX a = 2; DoubleX b = 3; Console.WriteLine($"a = {a}, b = {b}, 3+a^b = {3 + a ^ b}"); // Wrong result Console.WriteLine($"a = {a}, b = {b}, 3+a^b = {3 + (a ^ b)}"); // Correct result 

我希望这可以帮助那些在代码中使用很多复杂方程的人,也许有人甚至对如何改进这种方法有了一个想法?! 🙂

DoubleX类:

 using System; namespace ExponentialOperator { /// <summary> /// Double class that uses ^ as exponential operator /// </summary> public class DoubleX { #region ---------------- Fields ---------------- private readonly double _value; #endregion ------------- Fields ---------------- #region -------------- Properties -------------- public double Value { get { return _value; } } #endregion ----------- Properties -------------- #region ------------- Constructors ------------- public DoubleX(double value) { _value = value; } public DoubleX(int value) { _value = Convert.ToDouble(value); } #endregion ---------- Constructors ------------- #region --------------- Methods ---------------- public override string ToString() { return _value.ToString(); } #endregion ------------ Methods ---------------- #region -------------- Operators --------------- // Change the ^ operator to be used for exponents. public static DoubleX operator ^(DoubleX value, DoubleX exponent) { return Math.Pow(value, exponent); } public static DoubleX operator ^(DoubleX value, double exponent) { return Math.Pow(value, exponent); } public static DoubleX operator ^(double value, DoubleX exponent) { return Math.Pow(value, exponent); } public static DoubleX operator ^(DoubleX value, int exponent) { return Math.Pow(value, exponent); } #endregion ----------- Operators --------------- #region -------------- Converters -------------- // Allow implicit convertion public static implicit operator DoubleX(double value) { return new DoubleX(value); } public static implicit operator DoubleX(int value) { return new DoubleX(value); } public static implicit operator Double(DoubleX value) { return value._value; } #endregion ----------- Converters -------------- } } 

由于没有人写过两个整数的函数,下面是一个方法:

 private long CalculatePower(int Number, int PowerOf) { long Result = Number; for (int i = PowerOf; i > 1; i--) { Result = (Result * Number); } return Result; } CalculatePower(5, 3); // 125 CalculatePower(8, 4); // 4096 CalculatePower(6, 2); // 36 

或者在VB.NET中:

 Private Function CalculatePower(Number As Integer, PowerOf As Integer) As Long Dim Result As Long = Number For i As Integer = PowerOf To 2 Step -1 Result = (Result * Number) Next Return Result End Function CalculatePower(5, 3) ' 125 CalculatePower(8, 4) ' 4096 CalculatePower(6, 2) ' 36