2015-10-02 35 views
2

我想計算兩個不使用Math.Pow的冪,因爲我想避免使用double。所以我需要一個整數值。我以爲我可以只使用左移操作符,但是當我的停電過去的30,它給出了功率31負數,而1權力大於31如何計算使用左移運算符的大2的冪次?

我的方法看起來像

public static long TwoPowX(int power) 
    { 
     return (1 << power); 
    } 

有什麼建議嗎?或者可選的方法?

編輯: 我需要高達96可能更多。

2^96 = 79,228,162,514,264,337,593,543,950,336。

回答

1

我找到了解決方案的功率,而不是長(Int64的)都到最大功率63,我用的BigInteger從System.Numerics

public static BigInteger TwoPowX(int power) 
    { 
     return ((BigInteger)1 << power); 
    } 

然後使用

BigInteger test = Utility.TwoPowX(96); 

產生的科爾功率值大於63(在這個例子中 - 功率爲96)

{79228162514264337593543950336} 
4

字面1是一個int,所以整個表達式(1 << power)也將在轉換爲long之前被評估爲int和溢出。改爲使用1L

public static long TwoPowX(int power) 
{ 
    return (1L << power); 
} 
1

什麼是最大功率? 由於int由32位組成(31位爲正數),因此會發生溢出。

您可以使用長代替,但要記住,最大將有63

return (long) 1 << power; 
+0

他會怎麼做? –

+0

這是一個很好的觀點,我會像96強一樣高,我會在我的問題中加上這一點 – erotavlas