在C#中计算2的整数幂的简便方法?

时间:2011-03-31 22:25:28

标签: c# integer

我确信这并不像我要做到的那么困难。

想要使用等同于Math.Pow(double, double)但输出整数的东西。我担心浮点数的舍入错误。

我能想到的最好的是:

uint myPower = 12;
uint myPowerOfTwo = (uint)Math.Pow(2.0, (double)myPower);

我想到了这个:

uint myPowerOfTwo = 1 << myPower;    // doesn't work

但是我得到运算符“&lt;&lt;”的错误不能与int 和uint类型的操作数一起使用。

有什么建议吗?一如既往地谢谢。

2 个答案:

答案 0 :(得分:28)

你必须使用有符号整数作为移位运算符的第二个操作数(右侧):

int myPower = 12;
int myPowerOfTwo = 1 << myPower;   

当然,您可以将结果转换为其他数字类型,例如uint:

uint myPowerOfTwo = (uint) (1 << myPower);   

来自MSDN

  

左移运算符(&lt;&lt;&gt;)移位   它的第一个操作数由数字留下   由第二个指定的位数   操作数。 第二个操作数的类型必须是int

答案 1 :(得分:2)

如果您使用扩展/静态方法,那么稍后更容易找到并更正任何错误,优化器仍会内联它:

public static uint Exp2(this uint exponent) {
    return (uint)Math.Pow(2.0, (double)exponent);
}

然后你可以使用:

uint myPowerOfTwo = myPower.Exp2();