被群里的一道題給逗樂了,一群人在下面討論的不可開交,最后總結了一下,紀念紀念,補點基礎知識……
//原題:求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
