『壹』 如何理解c語言的左結合 和右結合性
指的是程序在計算時的計算順序,比如算 1+2+3+4
左結合性:
1+2+3+4 =
3+3+4
6+4
10
而右結合性是相反的。
當然計算的順序跟運算符號的優先順序有關,先優先順序再考慮結合性。
『貳』 C語言中的左結合性是什麼
您好!很高興為您解答。
「
「左結合性」,即運算對象先與左面的運算符結合。」
--《C程序設計》第三版P56,譚浩強著
不同級運算時,應首先考慮運算符的優先順序問題。
同級運算時,例如運算a-b+c,運算對象先與算式最左的運算符「
-
」結合,即先計算「a-b」,再由左至右依次和其他運算符結合計算。
望採納~如您還有不解,歡迎追問~
『叄』 C語言中,哪些運算符具有左結合性哪些具有右結合性
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語言中哪些運算符是右結合那些是左結合
呵呵
書就是
把一些別人都曉得的名詞
翻譯成誰也看不懂的句子。。(愛情公寓台詞,覺得挺有道理的)
至於區分是什麼結合,我個人經驗。
一般單目運算符是右結合,
其他2目,3目是左結合。
比如a+b
2目運算
左結合。。
至於1目運算符,比如,!
&還有
sizeof等都是右結合
這個道理很容易明白。
比如-
他如果不代表減號,而是負號。
那a-b=
a+(-b)
一目運算符號-先和右邊的b結合。
而++
--
就要看情況了
--a是左結合
a++是右結合
『陸』 C語言中的左結合性是什麼C語言中算術運算
int a = 2;
你可以看一下意思是將2賦值給a,向左邊走,所以是左結合性。
比如a=b=c;也是向左邊走
『柒』 c語言中那些運算是左結合那些是右結合拜託了各位 謝謝
c語言運算符號: 1級優先順序 左結合 () 圓括弧 [] 下標運算符 -> 指向結構體成員運算符 . 結構體成員運算符 2級優先順序 右結合 ! 邏輯非運算符 ~ 按位取反運算符 ++ 自增運算符 -- 自減運算符 - 負號運算符 (類型) 類型轉換運算符 * 指針運算符 & 地址與運算符 sizeof 長度運算符 3級優先順序 左結合 * 乘法運算符 / 除法運算符 % 取余運算符 4級優先順序 左結合 + 加法運算符 - 減法運算符 5級優先順序 左結合 << 左移運算符 >> 右移運算符 6級優先順序 左結合 <、<=、>、>= 關系運算符 7級優先順序 左結合 == 等於運算符 != 不等於運算符 8級優先順序 左結合 & 按位與運算符 9級優先順序 左結合 ^ 按位異或運算符 10級優先順序 左結合 | 按位或運算符 11級優先順序 左結合 && 邏輯與運算符 12級優先順序 左結合 || 邏輯或運算符 13級優先順序 右結合 ? : 條件運算符 14級優先順序 右結合 =+ =- =* =/ =% = >= < <= &= ^= |= 全為賦值運算符 15級優先順序 左結合 , 逗號運算符
『捌』 C語言中的左結合性是什麼
意思是:從表達式右邊開始執行;只有同優先順序的運算符才具有結合性「自左至右」或者「自右自左」一說。
有些運算符的優先順序是錯誤的。
「當按照常規方式使用時,可能引起誤會的任何運算符」就是存在錯誤優先順序的運算符。
.的優先順序高於*。->操作符用於消除這個問題。
*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語言中記住兩個優先順序就夠了:乘法和除法先於加法和減法,在涉及其他操作符時一律加上括弧。
結合性用於在幾個操作符具有相同的優先順序時確定先執行哪一個。
每個操作符擁有某一級別的優先順序,同時也擁有左結合性或者右結合性。所有的賦值符(包括復合賦值符)都具有右結合性(從右到左執行),因此可以使用連等的賦值形式。
唯一的三目運算符?:也是具有右結合性的。
所有優先順序相同的操作符,它們的結合性也相同,這是必須如此的。在函數調用中,各個參數的計算順序是不確定的。
『玖』 關於C語言裡面運算符的左結合和右結合
簡單的說就是表達式中有相鄰的運算符是相同優先順序的話,就按它們的結合性來安排表達式的運算順序.
比如x+y-z,+和-優先順序相同,它們都是左結合性的,所以運算順序是先+後-
a=b=c,兩個=優先順序相同,而=是右結合性的,所以先b=c,再a=b
優先順序不同當然高的先算
『拾』 c語言中運算符的結合方向什麼時候從左至右,什麼時候從右至左
左結合性:自左至右。
右結合性:自右至左。
一個運算量兩側的運算符優先順序相同時,按運算符的結合性所規定的結合方向處理。C語言中各運算符的結合性分為兩種,即左結合性和右結合性。
如,算術運算符的結合性是自左至右,即先左後右。如有表達式x-y+z則y應先與「-」號結合,執行x-y運算,然後再執行+z的運算。
而最典型的右結合性運算符是賦值運算符,如x=y=z,由於「=」的右結合性,應先執行y=z,再執行x=(y=z)運算。
(10)c語言中左結合擴展閱讀
C語言中的運算符
(1)算術運算符(+,-,*,/,%,++,--)。
(2) 關系運算符(<, >, <=, >=, ==, ![KG-*8]=) 。
(3) 邏輯運算符(!, &&, ||) 。
(4) 位運算符(<<, >>, ~, |, ^, &) 。
(5)賦值運算符(=,及其雙目運算符的擴展賦值運算符)。
(6)條件運算符(?:)。
(7)逗號運算符(,)。
(8) 指針運算符(*, &) 。
(9)求位元組數運算符(sizeof)。
(10)強制類型轉換運算符((類型))。
(11) 分量運算符(·, ->) 。
(12)下標運算符([])。
(13)圓括弧運算符(())。