C#数学问题:2的最小幂大于X?

时间:2011-04-02 18:43:42

标签: c# math

    public int CalcBrackets(int teamCount)
    {
        int positions = 1;

        while (positions < teamCount)
            positions *= 2;

        return positions;
    }

我想要的最小数字是2的幂,大于或等于teamCount。这真的是最好的方法吗?这看起来确实很糟糕:(

5 个答案:

答案 0 :(得分:10)

如果你需要计算的最小功率2(不是倍数)小于teamCount,那么可能它是最好的方法。采用对数是一个很容易的操作,可能需要更多的时间,然后是一个简单的循环。

<强> UPD 这是一个使用按位运算的算法(C ++)(http://aggregate.org/MAGIC/,Sext Next Largest Power of 2)

unsigned int nlpo2(unsigned int x)
{
    x--; // comment out to always take the next biggest power of two, even if x is already a power of two
    x |= (x >> 1);
    x |= (x >> 2);
    x |= (x >> 4);
    x |= (x >> 8);
    x |= (x >> 16);
    return (x+1);
}

首先,它将数字的所有相关位设置为1(例如,0x3ff),然后将其递增(0x400)以获得2的幂。

答案 1 :(得分:1)

答案 2 :(得分:1)

while循环不会超过2的倍数,而是2的幂。

如果你真的需要倍数只需加1,除以2得到半部分然后再乘以2:

return ((teamCount+1)/2)*2

所以,如果它甚至那么你获得了相同的nuber,而如果它是奇数,因为你加1然后除,你得到下一个偶数。

答案 3 :(得分:0)

答案 4 :(得分:0)

不大更小,如果你的意思是多个2 * 2 * 2 * 2 * log aritm最好的方法是使用基数2中的logaritma函数和圆形结果来降低基数。那就是如果团队数等于35 log 2 base 35给出你5,xxx把它绕到5。