Может кто-нибудь объяснить, почему вывод этой программы ложный ??
X && y дает 1. По-прежнему вывод ложный.
#include <stdio.h>
int main()
{
int x = 1, y = 2;
if(x && y == 1)
{
printf("true.");
}
else
{
printf("false.");
}
return 0;
}
4 ответа
Поскольку ==
имеет более высокий приоритет, чем &&
, сначала выполняется оценка этого get:
x && (y == 1)
y == 1 // 2 == 1
//Result: false
Что неверно, а затем второе:
x && false //1 && false
//Result: false
Таким образом, оператор if будет ложным
Дополнительную информацию о приоритете операторов см. Здесь: http://en.cppreference.com/w/ cpp / language / operator_precedence
Это нормально, если ложь, тогда 2 и 2, и это отличается от единицы. Вы спрашиваете, стоят ли оба x и y 1. Если это произойдет, скажите true, но false.
В нем четко указано: X = 1 & Y = 2; Теперь с вашим выражением
X && Y == 1
Выражение оценивается как Y == 1 (правило приоритета, также вывод - ложь)
X! = 0 (это правда)
Теперь && является логическим оператором И, поэтому он принимает значение Истина, только если обе части в выражении имеют значение Истина !!!
if(x && y == 1)
Такой же как
if( ( x != 0 ) && ( y == 1 ) )
Здесь x != 0
верно, но y == 1
ложно. И поскольку по крайней мере один из операндов &&
ложен, условие оценивается как ложное и выполняется часть else
.
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.