C中的奇怪整数比较

mar*_*npz 0 c comparison boolean

我用C编写简单的程序,我看不出原因:

printf("%d\n", 1 == 1 == 1);
printf("%d\n", 1 == 1);
printf("%d\n", 0 == 0 == 0);
printf("%d\n", 0 == 0);
Run Code Online (Sandbox Code Playgroud)

得到:

1
1
0
1
Run Code Online (Sandbox Code Playgroud)

我已经习惯了Python,所以这对我来说都很新奇.

(作为发明者的旁白?)

jpa*_*cek 12

我认为C是外星人而不是人类.

也许.没有人会把代码写成1 == 1 == 1.

无论如何,这里发生了什么.表达式被解析为AFAIK (1 == 1) == 1,因此它是另一个比较结果的比较1.真值在C中表示为整数; true为1,false为0.因此1 == 1为1(true)且等于1.

0 == 0 == 0,它是类似的:

(0 == 0) == 0
1 == 0 // 0 == 0 is true (1)
0 // 1 == 0 is false (0)
Run Code Online (Sandbox Code Playgroud)