Неожиданный вывод в программе 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
09 мая '17 в 12:14
источник поделиться
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.

+1
09 мая '17 в 12:35
источник

Операторы отношения связаны слева направо. Поэтому 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.

+10
09 мая '17 в 12:18
источник

Посмотрите другие вопросы по меткам или Задайте вопрос