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

14
我相信这并不像我所想象的那么困难。
想使用与Math.Pow(double,double)等效但输出整数的内容。我担心浮点舍入误差。
我能想到的最好的方法是:
uint myPower = 12;
uint myPowerOfTwo = (uint)Math.Pow(2.0, (double)myPower);

我想到了这个:

我有一个想法:

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

但是我收到错误信息,操作符 "<<" 不能用于 int 和 uint 类型的操作数。
有什么建议吗?感谢您一如既往的帮助。
2个回答

32

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

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

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

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

来自MSDN

左移运算符(<<)将其第一个操作数向左移动由第二个操作数指定的位数。第二个操作数的类型必须是int。


好的,看起来可以工作了!但是为什么会出现错误消息,说运算符“<<”不能与类型为int或uint的操作数一起使用呢?我不是刚刚使用了一个int吗? - John
(对于OP)如果必要的话,作为最后一步将其转换为uint类型 - Marc Gravell
3
@John,你确定它没有说“和”吗?意思是:组合吗? - Marc Gravell
啊!该死,我错过了!它确实说了“和”。谢谢! - John

2
如果您创建一个扩展方法或静态方法,那么以后查找和纠正任何错误会更容易,并且优化器仍然会将其内联:
public static uint Exp2(this uint exponent) {
    return (uint)Math.Pow(2.0, (double)exponent);
}

然后你可以像这样使用:
uint myPowerOfTwo = myPower.Exp2();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接