Неожиданный вывод в C-программе
Я запускаю следующую программу C
#include <stdio.h>
int main() {
int x = 5, y = 6, z = 3, i;
i = y > x > z;
printf("%d\n", i);
}
и получить вывод как 0
, Опять же, когда я бегу
#include <stdio.h>
int main() {
int x = 5, y = 6, z = 3, i;
i = y > x && x > z;
printf("%d\n", i);
}
Я получаю вывод как 1
, Кто-нибудь может объяснить логику этого?
2 ответа
i = y > x > z;
В первом примере ассоциативность >
оператор слева направо, итак, первый разобрал y > x
и дает логический результат.
y > x = 6 > 5 = True
затем,
1(True) > 3 = False
Итак, вывод 0
,
Во-вторых,
i = y > x && x > z;
>
оператор более высокий приоритет, чем &&
оператор. Итак, первый разобрал y > x
и если условие True, то проверьте x > z
,
Реляционные операторы связаны слева направо. Следовательно i = y > x > z;
будет проанализирован как
i = ( (y > x) > z ) => ( (6 > 5) > 3 ) => ( 1 > 3 ) => 0
а также i = y > x && x > z;
будет проанализирован как
i = (y > x) && (x > z) => (6 > 5) && (5 > 3) => 1 && 1 => 1
Тем не менее, в C y > x > z
не проверяет, если x
больше, чем z
и меньше чем y
, Но y > x && x > z
делает.
Обратите внимание, что реляционные операторы возвращают либо 0
или же 1
в зависимости от отношения между операндами false
или же true
,