代码
#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但是我不确定它是如何工作帮助我理解它..
答案 0 :(得分:2)
&&
的优先级高于?:
。
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
。
答案 1 :(得分:0)
我有点清楚地重写它(假设你知道简单的三元是什么):
#include<stdio.h>
main(){
int big,x=3,y=2,z=1,q=4;
if(x>y){
int tmp1 = (z > x) ? 20:10;
int tmp2 = (x > y) ? 85:12;
big= (tmp1>=tmp2) ? tmp1:tmp2;
}else{
int tmp1 = (y > z) ? 40:10;
int tmp2 = (x > q) ? 30:10;
big = (tmp1<=tmp2) ? tmp1:tmp2;
}
printf("\nbig =%d",big);
}
一个复杂的陈述是对以下方面的评价: (a&amp;&amp; b)=&gt;返回a和b之间的最大值 (a || b)=&gt;返回a和b之间的最小值
希望我回答。