C語言中的左結合性是什麼,C語言中左右結合性什麼意思?

2021-03-25 22:11:41 字數 6757 閱讀 2063

1樓:聊蒼斂曼珠

同乙個算式

a-b+c

左結合性

:(a-b)+c

右結合性:a-(b+c)

2樓:鄭邦姓念露

意思是:從表示式右邊開始執行;只有同優先順序的運算子才具有結合性「自左至右」或者「自右自左」一說。

有些運算子的優先順序是錯誤的。

「當按照常規方式使用時,可能引起誤會的任何運算子」就是存在錯誤優先順序的運算子。

.的優先順序高於*。->操作符用於消除這個問題。

*p.f變成了*(p.f)而不是(*p).f

高於*,於是int

*ap中的ap變成了元素為int指標的陣列。

函式()高於*,因此,int

*fp()不再是函式指標了,而是乙個函式,返回int

*。逗號運算子在所有運算子中優先順序最低,所以,i=1,

2就成了(i

=1),

2而不是i

=(1,

2)。逗號運算子的值是最右邊運算元的值,逗號運算子結合性從左至右,因此又稱為順序求值運算子。

在表示式中如果有布林操作、算術運算、位操作等混合計算,始終應該在適當的地方加上括號。x=

f()+

g()*

h();

乘法先於加法執行,但是g()和h()的呼叫可能以任何順序出現。

同樣,f()可能在乘法之前呼叫,也可能在乘法之後呼叫。

優先順序和結合性規則告訴你哪些符號組成乙個意群,大部分這樣的意群內部如何進行計算的次序是未定義的。

有些操作符,如&&和||等,其運算元的計算順序是確定的,它們使用短路原則。

c語言中記住兩個優先順序就夠了:乘法和除法先於加法和減法,在涉及其他操作符時一律加上括號。

結合性用於在幾個操作符具有相同的優先順序時確定先執行哪乙個。

每個操作符擁有某一級別的優先順序,同時也擁有左結合性或者右結合性。所有的賦值符(包括復合賦值符)都具有右結合性(從右到左執行),因此可以使用連等的賦值形式。

唯一的三目運算子?:也是具有右結合性的。

所有優先順序相同的操作符,它們的結合性也相同,這是必須如此的。在函式呼叫中,各個引數的計算順序是不確定的。

3樓:祁馨姬令璟

比如a+b-c,相當與(a+b)-c,也就是先算(a+b).這就是左結合性,對於同一優先順序的操作符,從左向右計算.

單目運算子一般具有右結合性.例如-a++,相當於-(a++)

4樓:頓谷佼夜卉

您好!很高興為您解答。

「「左結合性」,即運算物件先與左面的運算子結合。」

——《c程式設計》第三版p56,譚浩強著

不同級運算時,應首先考慮運算子的優先順序問題。

同級運算時,例如運算a-b+c,運算物件先與算式最左的運算子「-」結合,即先計算「a-b」,再由左至右依次和其他運算子結合計算。

望採納~如您還有不解,歡迎追問~

c語言中的左結合性是什麼

5樓:風林火陰山雷

您好!很高興為您解答。

「 「左結合性」,即運算物件先與左面的運算子結合。」 ——《c程式設計》第三版p56,譚浩強著

不同級運算時,應首先考慮運算子的優先順序問題。

同級運算時,例如運算a-b+c,運算物件先與算式最左的運算子「 - 」結合,即先計算「a-b」,再由左至右依次和其他運算子結合計算。

望採納~如您還有不解,歡迎追問~

6樓:千鋒教育

意思是:從表示式右邊開始執行;只有同優先順序的運算子才具有結合性「自左至右」或者「自右自左」一說。

有些運算子的優先順序是錯誤的。

「當按照常規方式使用時,可能引起誤會的任何運算子」就是存在錯誤優先順序的運算子。

.的優先順序高於*。->操作符用於消除這個問題。

*p.f變成了*(p.f)而不是(*p).f

高於*,於是int *ap中的ap變成了元素為int指標的陣列。

函式()高於*,因此,int *fp()不再是函式指標了,而是乙個函式,返回int *。

逗號運算子在所有運算子中優先順序最低,所以,i = 1, 2就成了(i = 1), 2而不是i = (1, 2)。

逗號運算子的值是最右邊運算元的值,逗號運算子結合性從左至右,因此又稱為順序求值運算子。

在表示式中如果有布林操作、算術運算、位操作等混合計算,始終應該在適當的地方加上括號。

x = f() + g() * h();

乘法先於加法執行,但是g()和h()的呼叫可能以任何順序出現。

同樣,f()可能在乘法之前呼叫,也可能在乘法之後呼叫。

優先順序和結合性規則告訴你哪些符號組成乙個意群,大部分這樣的意群內部如何進行計算的次序是未定義的。 有些操作符,如&&和||等,其運算元的計算順序是確定的,它們使用短路原則。

c語言中記住兩個優先順序就夠了:乘法和除法先於加法和減法,在涉及其他操作符時一律加上括號。

結合性用於在幾個操作符具有相同的優先順序時確定先執行哪乙個。

每個操作符擁有某一級別的優先順序,同時也擁有左結合性或者右結合性。所有的賦值符(包括復合賦值符)都具有右結合性(從右到左執行),因此可以使用連等的賦值形式。

唯一的三目運算子?:也是具有右結合性的。

所有優先順序相同的操作符,它們的結合性也相同,這是必須如此的。在函式呼叫中,各個引數的計算順序是不確定的。

7樓:匿名使用者

比如a+b-c,相當與(a+b)-c,也就是先算(a+b).這就是左結合性,對於同一優先順序的操作符,從左向右計算.

單目運算子一般具有右結合性.例如-a++,相當於-(a++)

8樓:流星不死

同乙個算式 a-b+c 左結合性 :(a-b)+c 右結合性:a-(b+c)

c語言中左右結合性什麼意思?

9樓:

其實很簡單,它就是同優先順序操作符在語句中的「運算優先順序(或叫順序)」。比如12/3*4,/和*是同優先順序操作符,先算12/3呢還是先算3*4呢?由於/和*都是左→右結合的,所以12/3*4就被解釋為(12/3)*4,而不會被解釋為12/(3*4)。

再比如當p是指標時的*p++,由於*和++同級別,它們又是右→左結合的,所以被解釋為*(p++)而不會被解釋為(*p)++。從以上可知,對於不同優先順序的操作符,結合性就起不到什麼作用了。個人理解,僅供參考。

10樓:匿名使用者

對左邊還是右邊的操作物件產生影響。

c語言中的左結合性是什麼c語言中算術運算

11樓:匿名使用者

int a = 2;

你可以看一下意思是將2賦值給a,向左邊走,所以是左結合性。

比如a=b=c;也是向左邊走

c語言中,哪些運算子具有左結合性?哪些具有右結合性?

12樓:夏末的晨曦

1級(左結合) () 圓括號;下標運算

符;->指向結構體成員運算子;. 結構體成員運算子。 2級(右結合) !

邏輯非運算子;~按位取反運算子;++字首增量運算子;--字首減量運算子;+正號運算子;-負號運算子;(型別)型別轉換運算子;*指標運算子;&位址運算子;sizeof長度運算子。 3級(左結合) *乘法運算子;/除法運算子;%取餘運算子。 4級(左結合) +加法運算子;-減法運算子。

5級(左結合) 《左移運算子;>>右移運算子。 6級(左結合) <、<=、>、>=關係運算子。 7級(左結合) ==等於運算子;!

=不等於運算子。 8級(左結合) &按位與運算子。 9級(左結合) ^按位異或運算子。

10級(左結合) |按位或運算子。 11級(左結合) &&邏輯與運算子。 12級(左結合) ||邏輯或運算子。

13級(右結合) ? :條件運算子。

14級(右結合) =、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算子。 15級(左結合) ,逗號運算子。

編輯本段運算子優先順序與結合性

運算子的優先順序:c語言中,運算子的運算優先順序共分為15 級。1 級最高,15 級最低。

在表示式中,優先順序較高的先於優先順序較低的進行運算。而在乙個運算量兩側的運算子 優先順序相同時,則按運算子的結合性所規定的結合方向處理。 運算子的結合性:

c語言中各運算子的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算子的結合性是自左至右,即先左後右。如有表示式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。

這種自左至右的結合 方向就稱為「左結合性」。而自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算子是賦值運算子。

如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z) 運算。c語言運算子中有不少為右結合性,應注意區別,以避免理解錯誤。 優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。

所有的優先順序中,只有三個優先順序是從右至左結合的,它們是單目運算子、條件運算子、賦值運算子。其它的都是從左至右結合。 具有最高優先順序的其實並不算是真正的運算子,它們算是一類特殊的操作。

()是與函式相關,與陣列相關,而->及.是取結構成員。 其次是單目運算子,所有的單目運算子具有相同的優先順序,因此在我認為的 真正的運算子中它們具有最高的優先順序,又由於它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。

另外在c語言裡,沒有前置後置之分,因為++ -- 是右結合所以右側優先運算,表現為 "運算元後置優先順序比較高" 的假象,前置和後置的區分是因為運算子過載而後加入c++的 接下來是算術運算子,*、/、%的優先順序當然比+、-高了。 移位運算子緊隨其後。 其次的關係運算子中,< <= > >=要比 == !

=高乙個級別,不大好理解。 所有的邏輯操作符都具有不同的優先順序(單目運算子除外,!和~) 邏輯位操作符的"與"比"或"高,而"異或"則在它們之間。

跟在其後的&&比||高。 接下來的是條件運算子,賦值運算子及逗號運算子。 在c語言中,只有4個運算子規定了運算方向,它們是&&、| |、條件運算子及賦值運算子。

&&、| |都是先計算左邊表示式的值,當左邊表示式的值能確定整個表示式的值時,就不再計算右邊表示式的值。如 a = 0 && b; &&運算子的左邊位0,則右邊表示式b就不再判斷。 在條件運算子中。

如a?b:c;先判斷a的值,再根據a的值對b或c之中的乙個進行求值。

賦值表示式則規定先對右邊的表示式求值,因此使 a = b = c = 6;成為可能。

編輯本段運算子優先順序等級口訣及註釋

運算子優先順序等級口訣

圓方括號、箭頭一句號, 自增自減非反負、針強位址長度, 乘除,加減,再移位, 小等大等、等等不等, 八位與,七位異,六位或,五與,四或,三疑,二賦,一真逗。 其中「,」號為乙個等級分段。

運算子優先順序等級註釋

「圓方括號、箭頭一句號」指的是第15級的運算子。其中圓方括號很明顯「()、」,箭頭 指的是指向結構體成員運算子「->」,句號 指的是結構體成員運算子「.」 ; 「自增自減非反負、針強位址長度」指的是第14級的運算子。

其中 非 指的是邏輯運算子「!」,反 指的是按位取反運算子「~」,負 指的是負號運算子「-」,針 指的是指標運算子「*」,強 指的是強制型別轉換運算子,位址 指的是位址運算子「&」,長度 指的是長度運算子「sizeof 」; 「乘除,加減,再移位」移位指的是左移運算子「<<」和右移運算子「>>」,其中除法還包括了 取餘運算子「%」; 「小等大等、等等不等」 指的是第10級到第9級的運算子:<、<=、>和》=,等等指的是等於運算子==,不等指的是不等於運算子!

= 「八位與,七位異,六位或」其中 八位與 指的是第8級的 按位與 運算子「&」,七位異 指的是第7級的按位異或 運算子「^」,六位或 指的是第6級的按位或運算子「|」; 「五與,四或」指的是第5級、第4級的邏輯與運算子「&&」和邏輯或運算子「||」; 「三疑,二賦,一真逗」指的是第3級到第1級的運算子。其中,三疑指的是條件運算子「?:」 (三有雙重含義:

即指優先級別是三,它的運算子型別也是三目,疑也取「?」之意),二賦 指的是賦值運算子=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,一真逗 指的是第1級的「,」運算子,真字只是為了語句需要罷了。 由於c語言的運算子優先順序與c++的不完全一樣(主要是增加了幾個運算子),所以這個口訣不能完全實用於c++.

但是應該能夠相容,大家可以比較一下他們的區別應該就能夠很快掌握c++的優先順序的!

編輯本段運算子應用舉例

·賦值運算子:a=5; a=b=0; 第乙個賦值語句把5賦給變數a;第二個賦值語句的意思是把0同時賦值給兩個變數。這是因為賦值語句是從右向左運算的,也就是說從右端開始計算,先b=0,然後a=b。

·復合賦值運算子:a=1;a+=3; 上面第二個賦值語句等價於a=a+3;即a=4。 ·算術運算子:

area=height*width;num=num1+num2/num3-num4; 第乙個賦值語句height和width相乘結果賦給變數area;第二個賦值語句先完成num2與num3的整除運算,然後與num1相加,再減去num4,結果賦給num。運算子運算順序先算乘除再算加減。單目正和單目負最先運算。

·邏輯運算子:a=1,b=1; a||b-1; 因為a=1為真值,所以不管b-1是不是真值,總的表示式一定為真值,這時後面的表示式就不會再計算了。 ·關係運算子:

if(a>0)... 如果a>0,則執行if語句中的內容,否則退出。 ·條件運算子:

a=(b>0)?b:-b; 當b>0時,a=b;當b不大於0時,a=-b;其實上面的意思就是把b的絕對值賦值給a。

·逗號運算子:b=2,c=7,d=5;a=(++b,c--,d+3); 有三個表示式,用逗號分開,所以最終的值應該是最後乙個表示式的值,也就是d+3=8,所以a=8。

右結合性是什麼意思,C語言中右結合性和右結合性是什麼意思

右結合性 就是在c語言中表示式中最右邊的操作最先執行,然後從右到左依次執行。右結合性 讀音 y u ji h x ng,左結合性 釋義 操作符 如位操作符 和 則是從左至右依次執行範圍 c語言中具有右結合性的運算子包括所有單目運算子以及賦值運算子 和條件運算子。其它都是左結合性。舉例 a b c d...

c語言中的for,for在c語言中是什麼意思

這麼改 main printf n d k 輸出語句放在這兒。並且注意一點,由於k是int型,所以當n 的結果超過int的size上限的話就會溢位,輸出結果就不對了。我試了一下,在vc上,當n大於16時就不溢位了。我也是學c的,所以就叫你同學了。學c要細心。你這有乙個小問題,但卻影響整個程式。mai...

C語言中ik是什麼意思,c語言中factorialK是什麼意思

c語言中 i k 就是 i i k 的意思 i k 的意思是i i k它是第十四級運算子。c語言中factorial k 是什麼意思 factorial函式的功能是實現n的階乘,傳進去的引數k,為參與階乘的最大值,然後返回乙個階乘的結果 vs factoria k 就表示k的階乘,然後把結果賦給vs...