C中的奇怪整数比较

时间:2012-02-09 11:09:39

标签: 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);

给出:

1
1
0
1

我已经习惯了Python,所以这对我来说都是新的和奇怪的。

(作为发明者的旁白?)

3 个答案:

答案 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. 运营商优先级(http://www.swansontec.com/sopc.html)。
  2. 在C / C ++ 0中相当于false,任何非零整数都等于true。
  3. bool类型可隐式转换为整数,0表示为false,1表示为true。
  4. 因此,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}}。