我确信这并不像我要做到的那么困难。
想要使用等同于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类型的操作数一起使用。
有什么建议吗?一如既往地谢谢。
答案 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();