错误:运算符“!”不能应用于类型为“int”的操作数

本文关键字:操作数 int 类型 不能 运算符 错误 应用于 | 更新日期: 2023-09-27 18:35:07

我是C尖锐编程的新手,正在编写程序来确定数字是否为2的幂。但是,作为运算符"!"获得错误不能应用于 int 类型的操作数。认为相同的程序在C++中运行良好。这是代码:

    public static void Main(String[] args)
    {
        int x;
        Console.WriteLine("Enter the number: ");
        x = Convert.ToInt32(Console.ReadLine());

        if((x != 0) && (!(x & (x - 1))))
            Console.WriteLine("The given number "+x+" is a power of 2");
    }

错误:运算符“!”不能应用于类型为“int”的操作数

在C#中,值0不等于falsedifferent than 0不等于true,这在C++中就是这种情况。

例如,此表达式在 C++ 中有效,但在 C# 中无效:while(1){} 。您必须使用 while(true) .


运算x & (x - 1)给出一个int(int 按位 AND int),因此默认情况下不会将其转换为布尔值。

要将其转换为bool,您可以在表达式中添加==!=运算符。

所以你的程序可以转换为这个:

public static void Main(String[] args)
{
    int x;
    Console.WriteLine("Enter the number: ");
    x = Convert.ToInt32(Console.ReadLine());
    if((x != 0) && ((x & (x - 1)) == 0))
        Console.WriteLine("The given number "+x+" is a power of 2");
}

我用== 0删除了!,但!((x & (x - 1)) != 0)也是有效的。

我通过将布尔类型分配给表达式并将"!"替换为"-"得到了答案

        public static void Main(String[] args)
        {
        int x;
        x = Convert.ToInt32(Console.ReadLine());
        bool y = ((x!=0) && -(x & (x-1))==0);
        if(y)
            Console.WriteLine("The given number is a power of 2");
        else
            Console.WriteLine("The given number is not a power of 2");
        Console.Read();