#include<stdio.h>
main()
{
int x=10,y=20;
if(!(!x)&&x)
printf("x=%d\n",x);
else
printf("y=%d\n",y);
return 0;
}
выход равен 10. как? , пожалуйста, укажите значение x на каждом шаге.Объяснить выход программы
#include<stdio.h>
main()
{
int x=10,y=20;
if(!(!x)&&x)
printf("x=%d\n",x);
else
printf("y=%d\n",y);
return 0;
}
выход равен 10. как? , пожалуйста, укажите значение x на каждом шаге.Объяснить выход программы
(!x) ==> (!10) ==> 0
!(0) ==> 1
1 && 10 ==> 1
поэтому вы получите заявление printf("x=%d\n",x);
.
Значение !x
является 0
, а затем !(!x)
является 1
что справедливо и условие в if()
(1 && 10)
т.е. становится истинным, так что печатает x=10
.
(!x)
- это логическое значение, которое проверяет, является ли x равным нулю, уступая нулю, если его операнд не равен нулю, а один, если его операнд равен нулю. if(!(!x))
эквивалентен if(x)
, так как он инвертирует !x
, который является инвертированным значением x. Этот результат объединяется с результатом x
оператором &&
. Поскольку оба условия выполняются, если блок выполняется
(! (! X)) эквивалентно x ????? –
В булевом смысле –
Что я имею в виду: 'if (! (! X))' равнозначно 'if (x)' –
Поскольку х 10,
!x=0
!(!x)=1
1&&10
верно
, следовательно, печать x
, т.е. 10
Во-первых, оператор pre cedence выглядит следующим образом
() > ! > &&
Теперь, решая на основе выше старшинства
1. (!x) = 0
2. !(!x) = !(0) = 1
3. (1 && 10) = 1// hence, true.
4. hence, print x = 10
+1 для упоминания приоритета, что имеет решающее значение. – Jens
Один со своей стороны тоже. – 0decimal0
@Jens Конечно, но было бы странно ожидать, что бинарный оператор будет связываться более плотно, чем унарный оператор, и даже более странно, чтобы он пересекал парсеры и связывался сильнее, чем операторы внутри. –
Ваш предполагаемый вывод не соответствует коду. –
«пожалуйста, укажите значение x на каждом шаге». Пожалуйста, прочтите FAQ. ** Вы должны показать значение x на каждом шаге. Если вы ошиблись, мы можем указать на это. –
Оператор '!' Возвращает 0, если его аргумент равен 0, и в этом случае он возвращает 1. Поэтому '!! x' возвращает 0, если' x' равно 0 и 1 в противном случае. Результат '1 && 10' равен 1 или true, поэтому выполняется первая' printf() '. –