首页 > 代码库 > 三目运算符的优先级问题

三目运算符的优先级问题

被群里的一道题给逗乐了,一群人在下面讨论的不可开交,最后总结了一下,纪念纪念,补点基础知识……

 

//原题:求3<8?(9<6?7:5):2>0?4:1的值
//在程序里面运行得到5,那是怎么得到的呢?这才是我们探讨的问题的所在,看演示
int n1 = 3<8?(9<6?7:5):2>0?4:1; //5
int n2 = 3<8?(9>6?7:5):2>0?4:1; //7
int n3 = 3<8?5:2>0?4:1; //5
int n4 = 3>8?5:2>0?4:1; //4
int n5 = 3<8?5:4; //5
int n6 = 3>8?5:4; //4

int n7 = 3>8?5:2>0?4:1; //4
int n8 = 3>8?5:2<0?4:1; //1
//综上输出结果,说明是先算的2>0?4:1得到4,然后再算3>8?5:4得到4.不过这是我根据程序结果推断的

 

那么,对于三目运算符的计算规则到底是怎么样的呢?其实是这样的,这个事要先确定优先级

//步骤:

//求3<8?(9<6?7:5):2>0?4:1
//括号的优先级是最高的,所以先算括号里的(9<6?7:5)得到5,
//然后算式变成 3<8?5:2>0?4:1;
//?:条件运算符,三目运算是从右往左分组计算的,所以先计算2>0?4:1,得到4;
//然后算式变成3<8?5:4,这就很easy啦,直接得到结果5;

明白步骤之后是不是感觉这没一点迷惑性啊,但是不明白计算的优先顺序,就算你能得到正确结果,也是有很大的水分在里面哟,我们要做的就是要透过现象看到本质,一步一步清晰知道结果是这样出来滴!

补充一张图:

 

技术分享


OSFF szy

 

三目运算符的优先级问题