簡體   English   中英

如何在常量表達式中求冪?

[英]How to do exponentiation in constant expression?

此問題之后在 VB 類的公共常量的初始化中使用了指數運算符^

Public Const MaxValue As Double = MaxMantissa * (2 ^ MaxExponent)

我正在將類轉換為 C#。 但是我發現 C# 沒有相同的運算符( ^仍然是一個運算符,但僅作為按位異或)。

Math.Pow() 作為運算符的替代方案給出,但不能用於常量表達式。 那么如何在 C# 中用指數表達式初始化一個常量呢?

(我不使用值而不是表達式,因為表達式中的值,也是常量,來自不同的地方MaxExponent來自基類, MaxMantissa在每個派生類中都不同。此外,每個類中有多個這樣的常量派生類,例如MaxPositiveValueMinPositiveValueMinNegativeValueMaxNegativeValue等)

因為在您的特定情況下,您希望將2提高到MaxExponent

2 ** MaxExponent

你可以把它作為左移,但當且僅當MaxExponent是一個小的正整數值:

1 << MaxExponent

像這樣

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

一般情況下(當MaxExponent是任意double MaxExponent值時),您可以嘗試將const更改為readonly

public static readonly double MaxValue = MaxMantissa * Math.Pow(2.0, MaxExponent);

基本上你不能(除非,如上所述,對於 2 的冪的微不足道的情況,可以通過移位運算符獲得)。

您可以對值進行硬編碼並添加注釋,或者您可以使用static readonly ,但請注意static readonly沒有相同的“烘焙到調用站點”語義。 大多數情況下,這不會出現問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM