c語言上的符號優先順序是怎樣的,C語言上的符號優先順序是怎樣的?

時間 2021-05-04 18:27:47

1樓:匿名使用者

1級優先順序 左結合

() 圓括號

下標運算子

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

. 結構體成員運算子

2級優先順序 右結合

! 邏輯非運算子

~ 按位取反運算子

++ 字首增量運算子

-- 字首增量運算子

+ 正號運算子

- 負號運算子

(型別) 型別轉換運算子

* 指標運算子

& 地址與運算子

sizeof 長度運算子

3級優先順序 左結合

* 乘法運算子

/ 除法運算子

% 取餘運算子

4級優先順序 左結合

+ 加法運算子

- 減法運算子

5級優先順序 左結合

<< 左移運算子

>> 右移運算子

6級優先順序 左結合

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

7級優先順序 左結合

== 等於運算子

!= 不等於運算子

8級優先順序 左結合

& 按位與運算子

9級優先順序 左結合

^ 按位異或運算子

10級優先順序 左結合

| 按位或運算子

11級優先順序 左結合

&& 邏輯與運算子

12級優先順序 左結合

|| 邏輯或運算子

13級優先順序 右結合

? : 條件運算子

14級優先順序 右結合

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

15級優先順序 左結合

, 逗號運算子

優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。

所有的優先順序中,只有三個優先順序是從右至左結合的,它們是單目運算子、條件運算子、賦值運算子。其它的都是從左至右結合。

具有最高優先順序的其實並不算是真正的運算子,它們算是一類特殊的操作。()是與函式相關,與陣列相關,而->及.是取結構成員。

其次是單目運算子,所有的單目運算子具有相同的優先順序,因此在我認為的 真正的運算子中它們具有最高的優先順序,又由於它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。

另外在c語言裡 沒有前置後置之分 因為++ --- 是右結合所以 右側優先運算 表現為 "後置優先順序比較高" 的假象 前置和後置的區分是因為運算子過載而後加入c++的

接下來是算術運算子,*、/、%的優先順序當然比+、-高了。

移位運算子緊隨其後。

其次的關係運算子中,< <= > >=要比 == !=高一個級別,不大好理解。

所有的邏輯操作符都具有不同的優先順序(單目運算子出外,!和~)

邏輯位操作符的"與"比"或"高,而"異或"則在它們之間。

跟在其後的&&比||高。

接下來的是條件運算子,賦值運算子及逗號運算子。

在c語言中,只有4個運算子規定了運算方向,它們是&&、| |、條件運算子及賦值運算子。

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

在條件運算子中。如a?b:c;先判斷a的值,再根據a的值對b或c之中的一個進行求值。

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

2樓:匿名使用者

下面是c語言中所使用的運算子的優先順序和結合性:

優先順序 運算子 結合性

(最高) () -> . 自左向右

! ~ ++ -- + - * & sizeof 自右向左* / % 自左向右

+ - 自左向右

<< >> 自左向右

< <= > >= 自左向右

== != 自左向右

& 自左向右

^ 自左向右

| 自左向右

&& 自左向右

|| 自左向右

?: 自右向左

= += -= *= /= %= &= ^= |= <<= >>= 自右向左

(最低) , 自左向右

c語言裡面的運算子優先順序如何?

3樓:匿名使用者

c語言中,運算子的運算優先順序共分為15 級。1 級最高,15 級最低。 在表示式中,優先順序較高的先於優先順序較低的進行運算。

而在一個運算量兩側的運算子 優先順序相同時,則按運算子的結合性所規定的結合方向處理。

各等級運算子如下:

(以下說明中,對傳統的1級和2級做了細化,1和2對應傳統1級,3和4對應傳統2級,所以細化說明共有17級。)

1、基本表示式 1級

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

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

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

2、字尾表示式 2級

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

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

postfix-expression . identifier,成員訪問,

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

postfix-expression ++,字尾自增

postfix-expression --,字尾自減

( type-name )

( type-name ) 複合初始化,c99後新增。

3、單目/一元運算 3級

++ unary-expression 字首自增

-- unary-expression 字首自減

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

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

sizeof ( type-name ) 求型別長度

4、強制型別表示式 4級

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

5、乘法表示式 5級

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

6、加法運算子 6級

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

7、移位運算子 7級

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

8、關係運算子 8級

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

9、相等運算子 9級

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

10、位與運算子 10級

「 & 」按位與運算子

11、位異或運算子 11級

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

12、位或運算子 12 級

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

13、邏輯與運算子 13級

「&&」邏輯與運算子。

14、邏輯或運算子 14 級

「 || 」邏輯或運算子。

15、三元條件運算子 15級

? :條件運算子。

16、賦值運算子 16 級

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

17、逗號運算子 17級

「,」逗號運算子。

具體可參見下圖:

4樓:匿名使用者

c語言運算子及其優先順序彙總表口訣

圓下箭頭一頓號

非凡增減富強針地長

三乘除,四加減,五移位

千萬別把魚忘記,它在盛飯的廚子裡

小燈大燈燈燈不等

爸餵魚,舅疑惑,裸雞也疑惑

十三姨,十四父,十五逗,兜到低

「圓下箭頭一頓號」指的是第15級的運算子。

正在裝載資料……

其中圓指的是運算子(),下指的是下標運算子,箭頭指的是指向結構體成員運算子->,頓號指的是結構體成員運算子、

「非凡增減富強針地長」指的是第14級的運算子。其中非指的是邏輯運算子!,凡指的是按位取反運算子~,增減指的是自增和自減運算子++和--,富指的是負號運算子-,強指的是型別轉換運算子(型別),針指的是指標運算子*,地指的是地址運算子&,長指的是長度運算子sizeof

「三乘除,四加減,五移位」 指的是第13級到第11級的運算子。其中三四五並無實際意義,只是起區分級別而已。也可以想象三指的是第13級運算子。

乘除指的是乘法運算子*和除法運算子/,加減指的是加法運算子+和減法運算子-,移位指的是左移運算子《和右移運算子》

「千萬別把魚忘記,它在盛飯的廚子裡」指的是求餘運算子%,它位於盛飯的廚子裡,即指和乘法運算子、除法運算子在一起。

「小燈大燈燈燈不等」 指的是第10級到第9級的運算子。其中小燈大燈指的是關係運算子<、<=、>和》=,燈燈指的是等於運算子==,不等指的是不等於運算子!=

「爸餵魚,舅疑惑,裸雞也疑惑」指的是第8級到第4級的運算子。其中,爸餵魚之指的是第8級的按位與運算子&,舅疑惑指的是第7級的按位異或運算子^和第6級的按位或運算子||,裸雞也疑惑指的是第5級、第4級的邏輯與運算子&&和邏輯或運算子||

「十三姨,十四父,十五逗,兜到低」 指的是第3級到第1級的運算子。其中,十三姨指的是條件運算子?: (三有雙重含義,即指?:

的優先順序別是三,它的運算子型別也是三目,?難道不是姨即疑惑嗎?),十四父的十四沒有實際意義,父指的是賦值運算子=、+=、-=、*=、/=、%=、>>=、<<=、&=、 ^=和|= ,十五逗指的是第1級的運算子,兜到低指的是15級運算子以,結束。

附錄:c語言運算子及優先順序

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

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

下標運算子

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

、 結構體成員運算子

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

~ 按位取反運算子

++ 自增運算子

-- 自減運算子

- 負號運算子

(型別) 型別轉換運算子

* 指標運算子

& 地址運算子

sizeof 長度運算子

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

/ 除法運算子

% 求餘運算子

12 + 加法運算子

- 減法運算子

11 << 左移運算子

>> 右移運算子

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

9 == 等於運算子

!= 不等於運算子

8 & 按位與運算子

7 ^ 按位異或運算子

6 | 按位或運算子

5 && 邏輯與運算子

4 || 邏輯或運算子

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

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

/=、%=、>>=、

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

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

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

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

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

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

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

位與異或和位或; //這幾個都是位運算: 位與(&)異或(^)位或(|)

"三分天下"**十;

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

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

條件高於賦值, //三目運算子優先順序排到 13 位只比賦值運算子和","高//需要注意的是賦值運算子很多!

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

由於c語言的運算子優先順序與c++的不完全一樣(主要是增加了幾個運算子),所以這個口訣不能完全實用於c++.但是應該能夠相容,大家可以比較一下他們的區別應該就能夠很快掌握c++的優先順序的!

((*strdest++=*strsrc++)!='\0'); :

重點:++後增運算子優先順序高於*

1.*strdest++相當於 *(strdest++)

2.由於是後自增,故執行順序為:

*strdest=*strsrc

strdest++ strsrc++ //該級順序不明

將*strdest與'\0'比較 //即,整個表示式的值為*strdest與'\0'的比較結果

值得注意的是,對於賦值表示式,表示式本身的值等於左邊子表示式的值。

通過以上深入的分析,我們知道這個表示式完成了以下多個功能:

1.對於指標strdest, strsrc,將strsrc所指的記憶體空間的值賦給由strdest所指的記憶體空間。

2.判斷賦值後的strdest所指的記憶體空間的指是否等於0。

3.對於指標strdest,strsrc,他們的值分別加1,即指向下一個元素。

即:該表示式實現了以下三個功能:

1.對於指標strdest, strsrc,將strsrc所指的記憶體空間的值賦給由strdest所指的記憶體空間。

2.判斷賦值後的strdest所指的記憶體空間的值是否等於0。

3.對於指標strdest,strsrc,他們的值分別加1,即指向下一個元素。

c語言各種符號的意思,C語言中的符號 和 是什麼意思?

職場沐川 在c語言中有兩種意思,一種是取地址符,是單目運算子 另一種是位運算子,表示 按位與 是雙目運算子。是位運算子,表示 按位或 1 符號 和 這兩個運算子都是二進位制的按位操作符。二進位制 與 都為1時,結果是1,否則是0。比如 1010 1011 1010,1010 1000 1000。二進...

C語言程式設計的註釋符號是?C語言源程式注註釋符號是

有兩種註釋方法 行註釋,可以註釋其後的一行。塊註釋,註釋這兩個符號中間的所有區域。釋的原則 註釋的目的是解釋 的目的 功能和採用的方法,提供 以外的資訊,幫助讀者理解 防止沒必要的重複註釋資訊。示例 如下注釋意義不大。if receive flag is true if receive flag 而...

c語言的指數符號,在C語言中指數運算怎麼用呀

c語言符號集包括 英文字母 數字和一些有特定含義的標點符號。任何c程式都是由c的符號集裡的符號構成具有一定含義的語句,再由這些語句組成程式。一 字母 數字和下劃線 大寫英文字母 a z 小寫英文字母 a z 數字符 0 9 下劃線 二 空白符 空白符是指 空格符 製表符 垂直製表符 回車符 換行符 ...