2011-03-31 81 views
11

我相信这并不像我想要的那样困难。在C#中计算2的整数幂的简单方法?

想使用相当于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。

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

回答

27

你将不得不使用用于所述第二操作数的移位操作者的带符号整数(右手侧):

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

当然,你可以把结果到另一个数值类型如uint:

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

MSDN

左移操作(< <)移位 它的第一个操作数由其第二个 操作数指定的位数 剩下。 第二个操作数的类型必须是int

+0

好的,这似乎工作!但为什么运算符“<<”的错误消息不能用于int或uint类型的操作数?我不是只使用int吗? – John 2011-03-31 22:30:20

+0

(适用于OP)如果需要,请将其作为最后一步输入 – 2011-03-31 22:30:56

+3

@John你确定它没有说*和*吗?含义:组合? – 2011-03-31 22:31:34

2

如果你提出延期/静态方法,那么这将是更容易找到,后来更正后的优化仍然会内联是:

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

然后你可以使用这样的:

uint myPowerOfTwo = myPower.Exp2();