在C#中检查一个整数是否为二的幂

本文关键字:是否 整数 一个 检查 | 更新日期: 2023-09-27 18:20:35

我的程序出了什么问题?

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);
    } 
}

}

我收到错误

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

在C#中检查一个整数是否为二的幂

使方法isPowerOfTwo为静态:

public static bool isPowerOfTwo (uint x)

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

除了指出该方法应该是静态的之外,还值得了解一种更有效的方法来确定一个数字是否是2的幂,使用位算术:

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

您忘记了静态。。。

public static bool isPowerOfTwo (uint x)

您有两个选项;

让你的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);
    } 
}
  • Static Classes and Static Class Members (C# Programming Guide)