我在C中编写简单的程序,我看不出原因:
printf("%d\n", 1 == 1 == 1);
printf("%d\n", 1 == 1);
printf("%d\n", 0 == 0 == 0);
printf("%d\n", 0 == 0);
给出:
1
1
0
1
我已经习惯了Python,所以这对我来说都是新的和奇怪的。
(作为发明者的旁白?)
答案 0 :(得分: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)
答案 1 :(得分:3)
您需要了解
因此,1 == 1 == 1
被评估为(1 == 1) == 1
- > true == 1
- > true
。从printf("%d\n", 1 == 1 == 1)
- > printf("%d\n", true)
- > printf("%d\n", (int)true)
- > printf("%d\n", 1)
- > 1
答案 2 :(得分:2)
如果两个操作数具有相同的值,==
运算符的结果为1
,如果两个值不同,则0
的结果为{{1}}。