如何使用左移运算符计算 2 的大幂次方?

ero*_*las 9 c#

我想在不使用 Math.Pow 的情况下计算 2 的幂,因为我想避免使用 double。所以我需要一个完整的整数值。我以为我可以只使用左移运算符,但是当我的幂超过 30 时,它会为 31 次幂给出负数,而对于大于 31 的幂则给出 1。

我的方法看起来像

    public static long TwoPowX(int power)
    {
        return (1 << power);
    }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?或者替代方法?

编辑:我需要高达 96 次方,甚至更高。

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

Jak*_*rtz 6

该文字1是一个 int,因此整个表达式(1 << power)在转换为 long 之前也将被计算为 int 并溢出。1L代替使用。

public static long TwoPowX(int power)
{
    return (1L << power);
}
Run Code Online (Sandbox Code Playgroud)


ero*_*las 2

我找到了一个解决方案,我使用 System.Numerics 中的 BigInteger,而不是 long (Int64)(它的最大幂为 63)

    public static BigInteger TwoPowX(int power)
    {
        return ((BigInteger)1 << power);
    }
Run Code Online (Sandbox Code Playgroud)

然后使用

    BigInteger test = Utility.TwoPowX(96);
Run Code Online (Sandbox Code Playgroud)

生成大于 63 的幂的正确值(在此示例中为 96 的幂)

{79228162514264337593543950336}
Run Code Online (Sandbox Code Playgroud)