c語言的左結合性與右結合性

2021-10-05 22:58:10 字數 1852 閱讀 9844

右結合性,就是在表示式中最右邊的操作最先執行,然後從右到左依次執行 

左結合性的操作符(如位操作符「&」和「|」)則是從左至右依次執行 

在標準c語言的文件裡,對操作符的結合性並沒有做出非常清楚的解釋。乙個滿分的回答是:它是仲裁者,在幾個操作符具有相同的優先順序時決定先執行哪乙個。 

每個操作符擁有某一級別的優先順序,同時也擁有左結合性或右結合性。優先順序決定乙個不含括號的表示式中運算元之間的「緊密」程度。例如,在表示式a*b+c中,乘法運算的優先順序高於加法運算子的優先順序,所以先執行乘法a*b,而不是加法b+c。 

但是,許多操作符的優先順序都是相同的。這時,操作符的結合性就開始發揮作用了。在表示式中如果有幾個優先順序相同的操作符,結合性就起仲裁的作用,由它決定哪個操作符先執行。像下面這個表示式: 

int a,b=1,c=2; 

a=b=c; 

我們發現,這個表示式只有賦值符,這樣優秀級就無法幫助我們決定哪個操作先執行,是先執行b=c呢?還是先執行a=b。如果按前者,a=結果為2,如果按後者,a的結果為1。 

所有的賦值符(包括復合賦值)都具有右結合性,就是在表示式中最右邊的操作最先執行,然後從右到左依次執行。這樣,c先賦值給b,然後b在賦值給a,最終a的值是2。類似地,具有左結合性的操作符(如位操作符「&」和「|」)則是從左至右依次執行。 

結合性只用於表示式**現兩個以上相同優先順序的操作符的情況,用於消除歧義。事實上你會注意到所有優先順序相同的操作符,它們的結合性也相同。這是必須如此的,否則結合性依然無法消除歧義,如果在計算表示式的值時需要考慮結合性,那麼最好把這個表示式一分為二或者使用括號。 

例: a=b+c+d 

=是右結合的,所以先計算(b+c+d),然後再賦值給a 

+是左結合的,所以先計算(b+c),然後再計算(b+c)+d 

c語言中具有右結合性的運算子包括所有單目運算子以及賦值運算子(=)和條件運算子。其它都是左結合性。 

在c語言中有少數運算子在c語言標準中是有規定表示式求值的順序的: 

1:&& 和 || 規定從左到右求值,並且在能確定整個表示式的值的時候就會停止,也就是常說的短路。 

2:條件表示式的求值順序是這樣規定的: 

test ? exp1 : exp2; 

條件測試部分test非零,表示式exp1被求值,否則表示式exp2被求值,並且保證exp1和exp2兩者之中只有乙個被求值。 

3:逗號運算子的求值順序是從左到右順序求值,並且整個表示式的值等於最後乙個表示式的值,注意逗號』,』還可以作為函式引數的分隔符,變數定義的分隔符等,這時候表示式的求值順序是沒有規定的! 

判斷表示式計算順序時,先按優先順序高的先計算,優先順序低的後計算,當優先順序相同時再按結合性,或從左至右順序計算,或從右至左順序計算。

優先順序關係:

括號成員第一;                //括號運算子() 成員運算子. ->

全體單目第二;              //所有的單目運算子比如++、 --、 +(正)、 -(負) 、指標運算*、&

乘除餘三,加減四;         //這個"餘"是指取餘運算即%

移位五,關係六;          //移位運算子:<< >> ,關係:> < >= <= 等

等於(與)不等排第七;      //即== 和!=

位與異或和位或;   "三分天下"**十;     //這幾個都是位運算: 位與(&)異或(^)位或(|) 

邏輯或跟與;              //邏輯運算子:|| 和 &&

十二和十一;           //注意順序:優先順序(||) 底於 優先順序(&&) 

條件高於賦值,                //三目運算子優先順序排到13 位只比賦值運算子和","高

逗號運算級最低!        //逗號運算子優先順序最低 

**:

c c 中 運算子 左結合與右結合

右結合性,就是在表示式中最右邊的操作最先執行,然後從右到左依次執行 左結合性的操作符 如位操作符 和 則是從左至右依次執行 在標準c語言的文件裡,對操作符的結合性並沒有做出非常清楚的解釋。乙個滿分的回答是 它是仲裁者,在幾個操作符具有相同的優先順序時決定先執行哪乙個。每個操作符擁有某一級別的優先順序...

C語言 操作符的結合性

記得以前學c的時候老喜歡考 操作符,公司筆試面試題也出現過 在此提供一些題 我個人的理解放在最後 a int main 執行結果是15,b int main 執行結果是15,c int main 執行結果是13,d int main 執行結果是20,e int main int c 4 int b ...

C語言運算子的結合性分析

運算子的結合性指同一優先順序的運算子在表示式中操作的組織方向,即 當乙個運算物件兩側運算子的優先級別相同時,運算物件與運算子的結合順序,c 語言規定了各種運算子的結合方向 結合性 大多數運算子結合方向是 自左至右 即 先左後右,例如a b c,b 兩側有 和 兩種運算子的優先順序相同,按先左後右結合...