如何在常量表达式中取幂运算?

Tob*_*oby 5 c# const exponent c#-6.0

这个问题之后使用指数运算符^初始化VB类的公共常量.

Public Const MaxValue As Double = MaxMantissa * (2 ^ MaxExponent)
Run Code Online (Sandbox Code Playgroud)

我正在将课程转换为C#.但是我发现C#没有相同的运算符(^仍然是运算符但只是按位xor).

Math.Pow()给定作为替代给操作员,但不能在常量表达式被使用.那么如何用C#中的指数表达式初始化常量?

(我不使用值而不是表达式,因为表达式中的值,也是常量,来自不同的地方.MaxExponent来自基类,MaxMantissa在每个派生类中都是不同的.此外,在每个派生类中有多个这样的常量如MaxPositiveValue,MinPositiveValue,MinNegativeValue,MaxNegativeValue,等等)

Dmi*_*nko 6

由于你的具体情况要提高2MaxExponent电源

2 ** MaxExponent
Run Code Online (Sandbox Code Playgroud)

你可以把它作为左移,但是当且仅当MaxExponent是一个小的正整数值:

1 << MaxExponent
Run Code Online (Sandbox Code Playgroud)

像这样

// double: see comments below `1L` stands for `long` and so MaxExponent = [0..63]   
public const double MaxValue = MaxMantissa * (1L << MaxExponent);
Run Code Online (Sandbox Code Playgroud)

一般情况下(何时MaxExponent是任意double值),您可以尝试更改constreadonly

public static readonly double MaxValue = MaxMantissa * Math.Pow(2.0, MaxExponent);
Run Code Online (Sandbox Code Playgroud)