Я пробовал некоторые программы на языке C и сталкивался с этим...
#include<stdio.h>
int main()
{
int j=3,k;
k=!5&&j;
printf("%d",k);
return 0;
}
может кто-нибудь выяснить, в чем проблема в этом случае, если я скомпилирую программу, я приведу к 0
и когда я попробовал тот же код в С#
public void logic()
{
j = 5;
k = !4 && j;
Console.WriteLine("hence the value would be " + k);
}
это сгенерирует ошибку * (Ошибка 1 Оператор '!' не может применяться к операнду типа 'int' C:\Documents and Settings\SANDEEP\Мои документы \Visual Studio 2005\Projects\ConsoleApplication18\ConsoleApplication18\Program. cs 21 17 ConsoleApplication18)
Я хочу знать, почему вывод моего кода c не работает и как я могу использовать! оператор в С#..... plz help....
В C любое ненулевое значение, такое как 5
, считается "истинным", поэтому !5
оценивается как 0
или "false". Таким образом, 0 && 3
также является ложным. Логические операторы в C.
В С# система типов немного сильнее в этом отношении. Оператор !
работает только с значениями типа bool
, который полностью не зависит от целых типов. См. ! Оператор в С#.
5
, когда интерпретируется как логическое значение, истинно, поэтому !5
дает логический результат false, что приводит к тому, что &&
также дает false. False интерпретируется как int
- 0
.
Читаемый код C: Скомпилируйте его, запустите его и как оцениваются выражения.
#include <stdio.h>
int main() {
int j = 3, k;
k = !5 && j;
printf("!5 = %d \n", !5);
printf("j = %d \n", j);
printf("!5 && j = %d \n", !5 && j);
printf("k = %d \n",k);
return 0;
}
Вероятно, вы не можете применить "!" к ints на С# таким образом. Я считаю, что вы можете достичь этого, используя "~" на int. Вы можете aply "!" к булевому (я не знаю, как он вызвал в С#).
Эквивалентный код этому коду C
#include<stdio.h>
int main()
{
int j=3,k;
k=!5&&j;
printf("%d",k);
return 0;
}
в С# будет
class Program {
static int Main()
{
int j=3, k;
k = !(5 != 0) && (j != 0) ? 1 : 0;
Console.WriteLine("{0}", k);
return 0;
}
}
Обратите внимание, что С# не позволяет использовать логические операторы boolean для int. Если вы хотите преобразовать ints в bools, вам придется писать код, чтобы сделать это, как я здесь.
Обе программы корректно выводят ноль, потому что 5 не равно 0, поэтому! 5 (C) или! (5!= 0) (С#) ложно. В C ложное преобразование в ноль. В С# альтернатива условного оператора дает нуль.
Отвечает ли это на ваш вопрос?
и как я могу использовать! оператор в С#.
Это логический оператор. Вы помещаете его справа от bool
, и это создает противоположное. В С# нет неявного преобразования из целого числа в bool
.
Кстати, ваш "тот же код" в С# имеет в нем разные значения!
В С# (и Java) вы можете сделать что-то вроде
k = (4 == 0) && (j != 0);
чтобы получить то же поведение, что и ваша программа на C. Сравнение целого числа с 0 дает те же "логики", что и C.
Если вы хотите выполнить битовую арифметику вместо простой логической арифметики, ваш код C использует неправильные операторы. Здесь образец ссылки с правильными операторами.
В вашем текущем C-коде, k =! 5 && j, 5 считается истинным, поэтому! 5 равно 0 (false). Затем вы AND AND с j, но любой false ANDed с любым логическим значением false, поэтому вы получаете 0.
Вероятно, вы хотите что-то вроде (tilda5) & j
Вы пытаетесь сделать логическое NOT. Вы должны сделать побитовое НЕ на int в С# (оператор ~, а не!). См. Здесь:
http://msdn.microsoft.com/en-us/library/d2bd4x66(VS.71).aspx