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

時間 2022-03-22 10:00:13

1樓:歐陽青芬葷婷

我對樓上都很無語,第二幅圖對你們妹啊?

運算所需變數為乙個的運算子叫單目運算子,例如!,&,();

運算所需變數為兩個的運算子叫做雙目運算子,例如+,-,*,/++,--都是單目運算子。

2樓:用梅飛詞

第一幅圖印刷錯誤,第二幅圖是對的。()是運算級別是最高的,沒有要求運算物件的個數;++、--次於圓括弧運算子,屬於單目運算子。另外與()同級別的還有[

]、->(指標指向結構體成員運算子)、.(結構體成員運算子)。

我的說法沒錯的,相信我吧!

3樓:永孝買冬

ls的說的對。1樓和2樓的說法不敢苟同。

雙目是兩個兩個運算元的運算符號,而不是是兩個符號比如++,單目是乙個運算元的運算子,所以同理3目的運算符號是:?(條件表示式)。其他的我持保留態度,%,

+,-,

*,/等注意都是雙目運算還包括大部分移位和邏輯運算的符號,單目的運算還包括++,

--,&(注意這個是取位址),*(這個是間接定址),!(非運算),兩張圖都或多或少有錯誤,建議你記憶優先順序的時候記住乘除的優先順序比+-高,括號的優先順序最高就是了,需要優先計算的地方加括號即可。

還有順便說句,請不要為了一點分忽悠初學者好麼?

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

4樓:匿名使用者

c語言的運算子包括單目運算子、雙目運算子、三目運算子,優先順序如下:

第1優先順序:各種括號,如()、等、成員運算子 . ;

第2優先順序:所有單目運算子,如++、--、!、~等;

第3優先順序:乘法運算子*、除法運算子/、求餘運算子%;

第4優先順序:加法運算子+、減法運算子-;

第5優先順序:移位運算子<<、>>;

第6優先順序:大於運算子》、大於等於運算子》=、小於運算子<、小於等於運算子<=;

第7優先順序:等於運算子==、不等於運算子!=;

第8優先順序:按位與運算子&;

第9優先順序:按位異或運算子^;

第10優先順序:按位或運算子|;

第11優先順序:邏輯與運算子&&;

第12優先順序:邏輯或運算子||;

第13優先順序:三目條件運算子 ?: ;

第14優先順序:各種賦值運算子,如=、+=、-=、*=、/= 等;

第15優先順序:逗號運算, 。

5樓:

優先順序 運算子 含義 運算子型別 結合方向

15 () 圓括號 單目 自左向右

下標運算子

—> 指向結構體成員運算子

、 結構體成員運算子

14 ! 邏輯非運算子 自右向左

~ 按位取反運算子

++ 自增運算子

-- 自減運算子

- 負號運算子

(型別) 型別轉換運算子

* 指標運算子

& 位址運算子

sizeof 長度運算子

13 * 乘法運算子 雙目 自左向右

/ 除法運算子

% 求餘運算子

12 + 加法運算子

- 減法運算子

11 << 左移運算子

>> 右移運算子

10 <、<=、>、>= 關係運算子

9 == 等於運算子

!= 不等於運算子

8 & 按位與運算子

7 ^ 按位異或運算子

6 | 按位或運算子

5 && 邏輯與運算子

4 || 邏輯或運算子

3 ?: 條件運算子 三目 自右向左

2 =、+=、-=、*=、

/=、%=、>>=、

<<=、&=、^=、|= 賦值運算子 雙目

1 , 逗號運算子 雙目 自左向右

中國物聯網校企聯盟技術部

6樓:聽不清啊

c語言的運算子主要用於構成表示式,同乙個符號在不同的表示式中,其作用並不一致。下面按計算的優先順序,分別說明不同作用的表示式。需要特別指出,在c語言標準中,並沒有結合性的說法。

相同優先順序運算子,從左至右依次運算。注意字尾運算優先順序高於字首。因此++i++應解釋為++(i++)。

而與或非的運算優先順序都不一樣,因此a && b || b && c解釋為(a && b) || (b && c)

合理使用優先順序可以極大簡化表示式。

基本表示式 1級

基本表示式(primary expressions),主要是用於運算子之間,做為運算數。

標識,常量,字串文字量,優先順序提公升表示式最優先執行。

優先順序提公升表示式是指圓括號包圍的表示式,如「( expression )」

字尾表示式 2極

postfix-expression [ expression ],陣列下標運算。

postfix-expression ( argument-expression-list),函式呼叫,括號內的引數可選。

postfix-expression . identifier,成員訪問,

postfix-expression -> identifier,成員訪問,->號之前應為指標。

postfix-expression ++,字尾自增

postfix-expression --,字尾自減

( type-name )

( type-name ) 復合初始化,c99後新增。例如

int* a = (int) ;

//等價於 int unamed = ; //unamed表示乙個不可見的變數名。

int* a = unamed;

單目/一元運算 3級

++ unary-expression 字首自增

-- unary-expression 字首自減

unary-operator cast-expression 單目轉型表式式, 包括 取位址& ,提領 * , 正號+ ,負號- 位反~ 邏輯否!。

sizeof unary-expression 求型別長度,對表示式求型別長度

sizeof ( type-name ) 求型別長度

強制型別表示式 4級

( type-name ) cast-expression,強制表示式成為type-name指定的型別。

乘法表示式 5級

「 * 」 乘法運算子;「 / 」除法運算子;「 % 」 取餘運算子。

加法運算子 6級

「 + 」加法運算子;「 - 」減法運算子。

移位運算子 7級

<< 左移運算子;>> 右移運算子。

關係運算子 8級

<、<=、>、>=關係運算子。

相等運算子 9級

「 == 」等於運算子;「 != 」不等於運算子。

位與運算子 10級

「 & 」按位與運算子

位異或運算子 11級

「 ∧ 」按位異或運算子(bitwise exclusive or operator)。

位或運算子 12 級

「 | 」按位或運算子(bitwise inclusive or operator)。

邏輯與運算子 13級

「&&」邏輯與運算子。

邏輯或運算子 14 級

「 || 」邏輯或運算子。

三元條件運算子 15級

? :條件運算子。

賦值運算子 16 級

=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算子。

逗號運算子 17級

「,」逗號運算子。

[pre]c 語言中,逗號(,)也可以是運算子,稱為逗號運算子(comma operator)。逗號運算子可以把兩個以上(包含兩個)的表示式連線成乙個表示式,稱為逗號表示式。其一般形式為:

子表示式1, 子表示式2, ..., 子表示式n

例如:a + b, c = b, c++

逗號運算子的優先順序是所有運算子中級別最低的,通常配合 for 迴圈使用。逗號表示式最右邊的子表示式的值即為逗號表示式的值。上例中,c++ 的值(c 自增之前的值)即為該表示式的值。

逗號運算子保證左邊的子表示式運算結束後才進行右邊的子表示式的運算。也就是說,逗號運算子是乙個序列點,其左邊所有***都結束後,才對其右邊的子表示式進行運算。因此,上例中,c 得到 b 的值後,才進行自增運算。

優先順序: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++的優先順序的!

應用舉例

1、賦值運算子:a=5;

a=b=0;

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

2、復合賦值運算子:a=1;a+=3;

上面第二個賦值語句等價於a=a+3;即a=4。

3、算術運算子:area=height*width;num=num1+num2/num3-num4;

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

4、邏輯運算子:a=1,b=1;

a||b-1;

因為a=1為真值,所以不管b-1是不是真值,總的表示式一定為真值,這時後面的表示式就不會再計算了。

5、關係運算子:if(a>0)...

如果a>0,則執行if語句中的內容,否則退出。

6、條件運算子:a=(b>0)?b:-b;

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

7、逗號運算子:b=2,c=7,d=5;

a=(++b,c--,d+3);

有三個表示式,用逗號分開,所以最終的值應該是最後乙個表示式的值,也就是d+3=8,所以a=8。

8、位邏輯運算子

包括:1。&位與符 2。|位或符 3。^位異或符 4。~位取反符

以運算元12為例。位運算子將數字12視為1100。位運算子將運算元視為位而不是數值。數值

可以是任意進製的:十進位制、八進位制或十六進製制。位運算子則將運算元轉化為二進位制,並相應地返回1或0。

位運算子將數字視為二進位制值,並按位進行相應運算,運算完成後再重新轉換為數字。例如:

表示式10&15表示(1010 & 1111),它將返回表示1010的值10。因為真真得真,或者是11得1,同位全是1結果也是1

表示式10|15表示(1010 | 1111),它將返回表示1111的值15。假假得假。全零得零。

表示式10^15表示(1010 ^ 1111), 它將返回表示0101的值5。此時是同性相斥,相同的就為假。

表示式~10表示(~1010),它將返回表示0101的值 -11。此號好理解,按位取反。

和 運算子優先順序(C,關於c 運算子優先順序 和 的?

菜刀撒 當然 的優先順序高 p 1 就是先做 p 然後 1 p 1 才是p指標的下一個位置 文庫精選 內容來自使用者 苟燁濤 c c 運算子的優先順序比較 優先順序 運算子 名稱 結合方向 說明 1 陣列下標,圓括號,物件,指標 1 2 型別 sizeof 負號,強制型別轉換,自增,自減,取值,取地...

算術運算子的優先順序怎麼判斷,算術運算子 邏輯運算子 關係運算子 哪個優先順序高 哪個底?

1級優先順序 左結合 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子 2級優先順序 右結合 邏輯非運算子 按位取反運算子 字首增量運算子 字首增量運算子 正號運算子 負號運算子 型別 型別轉換運算子 指標運算子 地址與運算子 sizeof 長度運算子 3級優先順序 左結合 乘法運算子 除...

C語言中三目運算子是什麼,C語言 三目運算子

墨汁諾 選擇運算,就是a b?c那個。三目運算子為a?b c即有三個參與運算的量。由條件運算子組成條件表示式的一般形式為 其求值規則為 如果表示式1的值為真,則以表示式2的值作為條件表示式的值,否則以表示式2的值作為整個條件表示式的值。條件表示式通常用於賦值語句之中。 尋涵衍歷氣 就是 和 這2個符...