带比较运算符的布尔输出

时间:2014-12-21 17:20:56

标签: c boolean-operations

为什么以下C代码的输出为1(True)?

#include<stdio.h>
main()
{
    int a, b = 1, c = 3, d = 2;
    a = b < c < d;
    printf("%d",a);
}

虽然相同的表达式给出了&#34; False&#34;在python中。

3 个答案:

答案 0 :(得分:3)

从左到右检查评估顺序。

b<c为真,因此返回1.

然后

1<d是的,所以你得到1

所以

a=1

确保您使用关系运算符后返回的值将为true或false。即0或1

答案 1 :(得分:2)

声明

a=b<c<d;

相当于

a = ( b < c ) < d;

不一样
a = ( b < c ) && ( c < d );

根据C标准(6.5.8关系运营商)

  

6每个运营商&lt; (小于),&gt; (大于),&lt; =(小于   或者等于),并且&gt; =(大于或等于)如果是,则产生1   指定的关系为true,如果为false,则为0 .107)结果为   输入int。

所以在这个陈述中

a = ( b < c ) < d;

当b小于c时,子表达式(b

答案 2 :(得分:-2)

a = ( b < c && c < d)

应返回您想要的值。