在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);
}
}
}
我收到错误
非静态字段、方法或属性需要对象引用
使方法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)