當前位置:首頁 » 編程語言 » c語言運算符的結合性有那個方向
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言運算符的結合性有那個方向

發布時間: 2022-05-23 21:41:48

c語言里的運算符結合方向

你的理解是對的
條件運算符的結合方向是自右至左,這個沒錯的話,
其實加點括弧就好了,便於理解,也就是考試老這么寫代碼

⑵ 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語言中運算符的「結合方向」到底是怎麼回事啊!

一般編譯器是把表達式由中綴形式(即一般形式)根據優先順序轉換為後綴形式,如3+2*5轉換為2 5 * 3 +,然後再從左到右運算

⑷ C語言算數運算符的結合性

結合性是規定運算符與運算數組合成表達式的結合方向。因為運算符是有優先順序別的,表達式的運算應該是先按運算符的優先順序由高到低的順序,結合運算數進行計算,當遇到同級別運算符或者是符號一樣但運算目數不同時,就要用到運算符的結合性。
例如:x=-b+c

x=a-b+c與x=a-b*c兩個表達式計算時是這樣的
對於x=-b+c,表達式運算時是這樣的,先數據棧讀入x,符號棧讀入=(賦值運算符),因為=是雙目運算符,還要讀入數據,所以繼續向後讀表達式;又讀到-號,不是數據,而且-號的運算級別高於=號,所以-號進入符號棧,繼續向後讀表達式,讀到數據b進入數據棧,這時候-b就符合負號運算符的自右向左結合的單目運算,就進行求值運算,符號棧中-號出棧,與數據棧中b結合成-b,-b就變為一個新的運算數據進入數據棧;後面繼續讀入+號,它是雙目運算符後面還要讀入一個運算數據,c就讀入了數據棧,後面沒有運算符再讀入,表達式結束,那麼就進行符號棧+號和數據棧中c和-b的值相加,將結果存入數據棧中,符號棧中+出棧;符號棧中還有=號,它和數據棧中的結果與x形成賦值的自右向左雙目結合運算,表達式的結果就此運算完畢。
對於x=a-b+c與x=a-b*c兩個表達式計算時,前面x=a-b過程是相同的,只是後面,由於*號比+號的運算級別高,所以表達式x=a-b*c中要先算b*c的結果,在一步一步回退進行a-和x=的運算。而表達式x=a-b+c中+號與-同級別,所以當滿足運算條件時就先進行a-b運算,然後進行+c和x=的運算。
不知道以上的說明,是否能讓你明白c語言中運算符結合性和表達式求值的過程。

⑸ C語言中,運算符中結合性屬於自右向左的是什麼

B
負號運算符的結合方向自右至左,其他的都自左至右。
原因嘛,沒什麼原因,就是這樣用的,書上也是這么寫的,算是規定吧!
一般c語言的書最後附錄里都有介紹,你去看看

⑹ C語言中結合性自右向左怎麼理解

1、簡單說就是,從表達式右邊開始執行;
只有同優先順序的運算符才具有結合性「自左至右」或者「自右自左」一說。
2、exp(不同優先順序運算符,依據優先順序高低進行運算):
int
a
=
1,
b
=10,
c
=
30;
int
a
=
a
*
b
+
c;
因為
*

+
的運算符優先順序高,所以
先計算a
*
b
(先計算左邊,未考慮結合性),在計算
10
+
c
結果是
a
=
300
exp(同優先順序運算符依據結合性進行運算):
int
a,
b
=
1,
c
=
8;
a
=
b
=
c;
賦值運算符其結合性即為自右向左,即
a
=
(
b
=
c),
其結果是
b
=
8,
a
=
8;
(錯誤答案:自左向右進行結合的話a
=
1)

⑺ C語言運算的優先順序別和結合方向表是什麼的

優先順序和結合性
C語言中,運算符的運算優先順序共分為15級。1級最高,15級最低。在表達式中,優先順序較高的先於優先順序較低的進行運算。
而在一個運算量兩側的運算符優先順序相同時,
則按運算符的結合性所規定的結合方向處理。
C語言中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算符的結合性是自左至右,即先左後右。如有表達式x-y+z則y應先與「-」號結合,
執行x-y運算,然後再執行+z的運算。這種自左至右的結合方向就稱為「左結合性」。而自右至左的結合方向稱為「右結合性」。
最典型的右結合性運算符是賦值運算符。如x=y=z,由於「=」的右結合性,應先執行y=z再執行x=(y=z)運算。
C語言運算符中有不少為右結合性,應注意區別,以避免理解錯誤。
運算符的種類C語言的運算符可分為以下幾類:
1.算術運算符
用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(++)、自減(--)共七種。
2.關系運算符
用於比較運算。包括大於(>)、小於(<)、等於(==)、
大於等於(>=)、小於等於(<=)和不等於(!=)六種。
3.邏輯運算符
用於邏輯運算。包括與(&&)、或(||)、非(!)三種。
4.位操作運算符
參與運算的量,按二進制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
5.賦值運算符
用於賦值運算,分為簡單賦值(=)、復合算術賦值(+=,-=,*=,/=,%=)和復合位運算賦值(&=,|=,^=,>>=,<<=)三類共十一種。
6.條件運算符
這是一個三目運算符,用於條件求值(?:)。
7.逗號運算符
用於把若干表達式組合成一個表達式(,)。
8.指針運算符
用於取內容(*)和取地址(&)二種運算。
9.求位元組數運算符
用於計算數據類型所佔的位元組數(sizeof)。
10.特殊運算符
有括弧(),下標[],成員(→,.)等幾種。

⑻ C語言中條件預算符的結合方向如何

條件運算符(?:)這個表達式,它的結合是右結合式的。就是說自右向左運算。這個是硬性的規定,沒有為什麼。
它屬於三目運算符,對第一個表達式作真、假判斷,然後根據結果返回另外兩個表達式其中的一個的值。
<表達式1>?<表達式2>:<表達式3>
在運算中,首先對第一個表達式進行判斷,如果為真,則返回表達式2的值;如果為假,則返回表達式3的值。
例如:
a=(b>0)?b:-b;
當b>0成立時(為真),將b賦值給a:a=b;當b>0不成立時,將-b賦值給a:a=-b。
有人覺得,這正是從左往右算的啊。不錯,但是,結合性不是指這個。
一個多運算對象的表達式運算時的前後順序是先看優先順序,高優先順序先計算,低優先順序後計算!在優先順序相同的情況下,要看結合性,左結合性的運算符由左向右運算,右結合的運算符由右向左運算!
所以,在有相同優先順序的時候才考慮到結合性。
看這個:
a?b:c?d:e
這個要怎麼算?先看優先順序,兩個一樣。再看結合性,右結合,所以:
先算c?d:e
再算 a?b:(c?d:e) 這就是所謂右結合。如果是左結合的話 就是先算a?b:c
不知道你明白了沒有。

另外,並非只有=是右結合的 c語言書後都有,結合性和優先順序如下:
優先順序 運算符 結合性
(最高) () [] -> . 自左向右
! ~ ++ -- + - * & sizeof 自右向左
* / % 自左向右
+ - 自左向右
<< >> 自左向右
< <= > >= 自左向右
== != 自左向右
& 自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
= += -= *= /= %= &= ^= |= <<= >>= 自右向左 (最低) , 自左向右

希望能給你幫助。

⑼ 遇到c語言的一條題:運算符!=的結合性是什麼這個怎麼回答

運算符!=的結合性是自左至右。例如:表達式5 != 7 != 1,先計算5 != 7的值,由於5不等於7,它的值為1,再算1 != 1,由於1等於1,所以它的值為0。因此整個表達式的值為0。

⑽ c語言中運算符有哪幾種,優先順序順序是怎樣

C語言中,運算符除了常見的三大類,算術運算符、關系運算符與邏輯運算符之外,還有一些用於完成特殊任務的運算符。

運算符的運算優先順序共分為15 級,1 級最高,15 級最低。 在表達式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算符 優先順序相同時,則按運算符的結合性所規定的結合方向處理。

一級運算符:標識,常量,字元串文字量,優先順序提升表達式最優先執行。

二級運算符:數組下標運算(expression)、函數調用(argument-expression-list)、成員訪問(identifier、-> identifier)、後綴自增(i++)、後綴自減(i--)、復合初始化(initializer-list)。

三級運算符:前綴自增(++i)、前綴自減(--i)、單目轉型表式式(取地址& ,提領 * , 正號+ ,負號-、位反~ 邏輯否!)、求類型長度(sizeof unary-expression)。

四級運算符:強製表達式成為type-name指定的類型( type-name ) cast-expression。

五級運算符:「 * 」 乘法運算符。

六級運算符:「 + 」加法運算符。

七級運算符:<< 左移運算符;>> 右移運算符。

八級運算符:<、<=、>、>=關系運算符。

九級運算符:「 == 」等於運算符;「 != 」不等於運算符。

十級運算符:「 & 」按位與運算符。

十一級運算符:「 ∧ 」按位異或運算符。

十二級運算符:「 | 」按位或運算符。

十三級運算符:「&&」邏輯與運算符。

十四級運算符:「 || 」邏輯或運算符。

十五級運算符:? :條件運算符。

(10)c語言運算符的結合性有那個方向擴展閱讀

C語言中各運算符的結合性:

1、左結合性(自左至右):

例如算術運算符的結合性是自左至右,即先左後右。如有表達式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合方向就稱為「左結合性」。

2、右結合性(自右至左)

自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算符是賦值運算符。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。C語言運算符中有不少為右結合性,應注意區別,以避免理解錯誤。