运算符优先级 - 表达式评估

时间:2011-03-28 13:45:41

标签: c operator-precedence

对于以下代码段,我将输出作为1。我想知道它是怎么来的?

void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}

7 个答案:

答案 0 :(得分:7)

i=x<y<z;被解释为i=(x<y)<z,后者又被解释为i=1<z,其评估为1。

答案 1 :(得分:2)

10小于20,导致1,1小于5,导致1. C不像其他语言那样链接关系运算符。

答案 2 :(得分:1)

它的运作方式如下: 由于<是一个逻辑表达式,x<y10<20为真,即1.因此它变为1<z,即1<5再次为真,即分配为1到i。所以i是1.

答案 3 :(得分:0)

这是因为您的代码评估为:

void main()
{
    int x=10,y=20,z=5,i;
    i=((x<y)<z); //(x<y) = true = 1, (1 < 5) = true
    printf("%d",i);
}

答案 4 :(得分:0)

你想要什么输出?

在C中,

i = 2 < 3; //i == 1.
i = 4 < 3; //i == 0.
  

如果condition的计算结果为false,则返回的值为0,否则为1   另外,x < y&lt; z将被评估为((x

答案 5 :(得分:0)

x<y // 1 as (10 < 20) will return 1
result of(x<y)<z // 1 as (1<5) will return 1 

答案 6 :(得分:0)

C ++并不支持那样的多部分比较。

x < y < z

被解释为

(x < y) < z

或者确定是否x < y,然后查看布尔是否小于z

为什么 over at the software engineering StackExchange进行了一些讨论。

当你发现自己试图这样做时,你需要把它写成两个由布尔结合的单独比较:

(x < y) && (y < z)