Вопрос относительно реляционного оператора в C? - PullRequest
1 голос
/ 25 февраля 2011

Я изучаю язык C, и у меня есть следующий вопрос (извините, если они глупые)

Я использую Dev-C ++ 4.9.9.2 для запуска некоторых примеров:

int m=3, n=4, k = 2;
(1) printf("%d", k<m<n); => this one prints 1
(2) printf("%d", k>m>n); => this one prints 0
(3) printf("%d", m<n>k); => this one prints 0

Как сказано в книге: «Нулевое значение означает ложь, а любое другое значение означает истину». Итак, почему утверждение (3) печатает 0 (ложь). Я думал, что это должно быть 1, или что мне здесь не хватает?

Кто-нибудь может дать мне четкое объяснение, пожалуйста?

Большое спасибо.

1 Ответ

8 голосов
/ 25 февраля 2011

В соответствии с правилами приоритета C, m<n>k интерпретируется как (m<n)>k (другие ваши примеры следуют той же форме). m<n является истинным, то есть равным 1. Тогда утверждение на самом деле 1>k, что ложно, то есть 0.

...