无法获得三元运算符的输出
unable to get the output of ternary operator
代码
#include<stdio.h>
main()
{
int big, x = 3, y = 2, z = 1, q = 4;
big = (x > y
? (z > x ? 20 : 10 && x > y ? 85 : 12)
: (y > z ? 40 : 10 || x < q ? 30 : 10)
);
printf("\nbig =%d", big);
//getch();
}
输出是 85 但我不确定它是如何工作的 帮助我理解它..
&&
的优先级高于 ?:
。
big=(x>y?(z>x?20:10 && x>y?85:12): (y>z?40:10 || x<q?30:10));`
将被解析为
big=(x>y?(z>x ? 20: ( (10 && x>y) ?85:12) ): (y>z ? 40: (10 || x<q?30:10)));
由于x
大于y
,所以20: (10 && x>y?85:12)
会被执行。 10
和 x > y
都将计算为 true
,(10 && x>y) ?85:12)
将给出 85
.
代码
#include<stdio.h>
main()
{
int big, x = 3, y = 2, z = 1, q = 4;
big = (x > y
? (z > x ? 20 : 10 && x > y ? 85 : 12)
: (y > z ? 40 : 10 || x < q ? 30 : 10)
);
printf("\nbig =%d", big);
//getch();
}
输出是 85 但我不确定它是如何工作的 帮助我理解它..
&&
的优先级高于 ?:
。
big=(x>y?(z>x?20:10 && x>y?85:12): (y>z?40:10 || x<q?30:10));`
将被解析为
big=(x>y?(z>x ? 20: ( (10 && x>y) ?85:12) ): (y>z ? 40: (10 || x<q?30:10)));
由于x
大于y
,所以20: (10 && x>y?85:12)
会被执行。 10
和 x > y
都将计算为 true
,(10 && x>y) ?85:12)
将给出 85
.