三目运算符的优先级问题

Posted 大水煮鱼的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三目运算符的优先级问题相关的知识,希望对你有一定的参考价值。

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

 

//原题:求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

 

以上是关于三目运算符的优先级问题的主要内容,如果未能解决你的问题,请参考以下文章

三目运算符及自动拆箱问题及性能比较

uni-app三目运算 uni-app监听属性

java运算符优先级记忆口诀

c语言中,三木运算符和if语句哪个效率更高一些?

宏任务和微任务——三目算符与加号优先级——原生的js如何禁用button——0xff ^ 33 的结果是——in的用法——正则匹配网址

Java三目运算符