三目運算符的優先級問題


被群里的一道題給逗樂了,一群人在下面討論的不可開交,最后總結了一下,紀念紀念,補點基礎知識……

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM