在C#中检查整数是否为2的幂

时间:2013-07-02 06:19:08

标签: c#

我的计划出了什么问题?

namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        bool check = isPowerOfTwo(255);
        Console.WriteLine(check);
        Console.ReadKey();
    }

    public bool isPowerOfTwo (uint x)
    {
        while (((x % 2) == 0) && x > 1)
        {
            x /= 2;
        }
        return (x == 1);
    } 
}

}

我收到了错误

  

非静态字段,方法或属性需要对象引用。

4 个答案:

答案 0 :(得分:5)

使方法isPowerOfTwo静态:

public static bool isPowerOfTwo (uint x)

方法Main是静态的,因此您只能在其中调用同一类的静态方法。但是,当前isPowerOfTwo是一个实例方法,只能在Program类的实例上调用它。当然,您也可以在Program内创建Main类的实例并调用它的方法,但这似乎是一个开销。

答案 1 :(得分:2)

除了指出该方法应该是静态的,可能值得知道一种更有效的方法来确定一个数是否是2的幂,使用位算术:

public static bool IsPowerOf2(uint x)
{
    return (x != 0) && (x & (x - 1)) == 0;
}

答案 2 :(得分:1)

您有2个选项;

让您的isPowerOfTwo方法static赞成;

public static bool isPowerOfTwo(uint x)
{
    while (((x % 2) == 0) && x > 1)
    {
        x /= 2;
    }
    return (x == 1);
} 

或者创建一个类的实例,然后调用你的方法;

class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();
        bool check = p.isPowerOfTwo(255);
        Console.WriteLine(check);
        Console.ReadKey();
    }

    public bool isPowerOfTwo(uint x)
    {
        while (((x % 2) == 0) && x > 1)
        {
            x /= 2;
        }
        return (x == 1);
    } 
}

答案 3 :(得分:1)

你忘了静......

public static bool isPowerOfTwo (uint x)