2013-10-13 5 views
3

Я новичок в программировании C и писал программу, чтобы определить, является ли число силой 2 или нет. Но получить ошибку как Operator '!' не может применяться к операнду типа int. Думал, что одна и та же программа хорошо работает на C++. Вот код:Ошибка: оператор '!' не может быть применен к операнду типа 'int'

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"); 
    } 
+0

просто удалить оператор отрицания от этого к этому ((х & (х - 1))) он будет работать и представить вам с желаемый результат. – terrybozzio

ответ

4

В C#, значение 0 не равно false и different than 0 не равна true, что имеет место в C++.

Например, это выражение действительно в C++, но не C#: while(1){}. Вы должны использовать while(true).


Операция x & (x - 1) дает оценку 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) также будет действительным.

+0

, когда я заменяю '!' с '-' он работает и меняет выражение на тип bool. Это сработало. –

+0

Чтобы инвертировать все биты порядкового номера, используйте оператор '' '' '(http://msdn.microsoft.com/en-us/library/vstudio/d2bd4x66.aspx). –

+0

@ LasseV.Karlsen ~ компилирует, но не работает для логики решения –

0

Я получил ответ, присвоив булеву тип выражению и заменив '!' с '-' (! (х & (х - 1)))

 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(); 
Смежные вопросы