【问题标题】:Easy way to calculate integer powers of 2 in C#?在C#中计算2的整数幂的简单方法?
【发布时间】:2011-07-27 07:10:33
【问题描述】:

我相信这并不像我想象的那么难。

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

我能想到的最好的是:

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

我想到了这个:

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

但我得到的错误是运算符“or 和 uint 类型的操作数一起使用。

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

【问题讨论】:

    标签: c# integer


    【解决方案1】:

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

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

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

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

    来自MSDN

    左移运算符 (第二个操作数的类型必须是int。

    【讨论】:

    • 好吧,这似乎行得通!但是为什么操作符“
    • (对于 OP)并在必要时转换为 uint 作为最后一步
    • @John 你确定它没有说 and 吗?意思:组合?
    • 啊啊啊啊!该死的,我错过了!它确实说。谢谢!
    【解决方案2】:

    如果你做一个扩展/静态方法,那么以后发现和纠正任何错误会更容易,优化器仍然会内联它:

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

    然后你可以像这样使用:

    uint myPowerOfTwo = myPower.Exp2();
    

    【讨论】:

      猜你喜欢
      • 2014-02-21
      • 1970-01-01
      • 2023-03-30
      • 2020-05-24
      • 2023-03-14
      • 1970-01-01
      • 2019-12-05
      • 2011-08-03
      • 1970-01-01
      相关资源
      最近更新 更多