Неожиданный вывод в 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,

Другие вопросы по тегам