[C言語] Cパズルブック 1.5.4-5 関係演算子と条件演算子 3値の比較

『Cパズルブック』(Alan R.Feuer, 1985)
[Mac M2 Pro 12CPU, macOS Ventura 13.3.1, clang 14.0.3]

問1.5.4 -5の解法は以下の通りです。

#include <stdio.h>
#define PRINT(int) printf("%d\n",int)

int main() {
    int x , y, z;

    x = 3; y = z = 4;

    // 問1.5.4
    PRINT((z >= y >= x) ? 1 : 0);

    // PRINT(((z >= y) >= x) ? 1 : 0);
    // 計算1: z >= y
    //       4 >= 4 はTRUE 1
    // 計算2: (z >= y) >= x
    //       1 >= 3 はFALSE
    // 計算3: Lt ? 1 : 0
    //       FALSEは0
    // よって出力は0となる
    // しかし途中で整数がブール値に変わっていて正しい比較になっていない

    // 問1.5.5
    PRINT(z >= y && y >= x);

    // PRINT((z >= y) && (y >= x));
    // 計算1: z >= y
    //       4 >= 4 はTRUE 1
    // 計算2: y >= x
    //       4 >= 3 はTRUE 1
    // 計算3: Lt && Rt
    //       TRUE && TRUEは1
    // よって出力は1となる
    // こちらはブール値の論理ANDを計算する形でありx,y,zの正しい比較になっている

    return 0;
}
0
1