错误:运算符“!”不能应用于类型为“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");
}
在C#中,值0
不等于false
,different 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();