『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