日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C运算符优先级

發(fā)布時間:2025/4/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C运算符优先级 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

優(yōu)先級

運算符

名稱或含義

使用形式

結(jié)合方向

說明

1

[]

數(shù)組下標

數(shù)組名[常量表達式]

左到右

?

()

圓括號

(表達式)/函數(shù)名(形參表)

?

.

成員選擇(對象)

對象.成員名

?

->

成員選擇(指針)

對象指針->成員名

?

2

-

負號運算符

-表達式

右到左

單目運算符

(類型)

強制類型轉(zhuǎn)換

(數(shù)據(jù)類型)表達式

?

++

自增運算符

++變量名/變量名++

單目運算符

--

自減運算符

--變量名/變量名--

單目運算符

*

取值運算符

*指針變量

單目運算符

&

取地址運算符

&變量名

單目運算符

!

邏輯非運算符

!表達式

單目運算符

~

按位取反運算符

~表達式

單目運算符

sizeof

長度運算符

sizeof(表達式)

?

3

/

表達式/表達式

左到右

雙目運算符

*

表達式*表達式

雙目運算符

%

余數(shù)(取模)

整型表達式/整型表達式

雙目運算符

4

+

表達式+表達式

左到右

雙目運算符

-

表達式-表達式

雙目運算符

5

<<

左移

變量<<表達式

左到右

雙目運算符

>>

右移

變量>>表達式

雙目運算符

6

>

大于

表達式>表達式

左到右

雙目運算符

>=

大于等于

表達式>=表達式

雙目運算符

<

小于

表達式<表達式

雙目運算符

<=

小于等于

表達式<=表達式

雙目運算符

7

==

等于

表達式==表達式

左到右

雙目運算符

!=

不等于

表達式!= 表達式

雙目運算符

8

&

按位與

表達式&表達式

左到右

雙目運算符

9

^

按位異或

表達式^表達式

左到右

雙目運算符

10

|

按位或

表達式|表達式

左到右

雙目運算符

11

&&

邏輯與

表達式&&表達式

左到右

雙目運算符

12

||

邏輯或

表達式||表達式

左到右

雙目運算符

13

?:

條件運算符

表達式1? 表達式2: 表達式3

右到左

三目運算符

14

=

賦值運算符

變量=表達式

右到左

?

/=

除后賦值

變量/=表達式

?

*=

乘后賦值

變量*=表達式

?

%=

取模后賦值

變量%=表達式

?

+=

加后賦值

變量+=表達式

?

-=

減后賦值

變量-=表達式

?

<<=

左移后賦值

變量<<=表達式

?

>>=

右移后賦值

變量>>=表達式

?

&=

按位與后賦值

變量&=表達式

?

^=

按位異或后賦值

變量^=表達式

?

|=

按位或后賦值

變量|=表達式

?

15

,

逗號運算符

表達式,表達式,…

左到右

從左向右順序運算

說明:

同一優(yōu)先級的運算符,運算次序由結(jié)合方向所決定。

簡單記就是:! > 算術(shù)運算符 > 關(guān)系運算符 > && > || > 賦值運算符



Table
0. 為什么要掌握優(yōu)先級
1. 優(yōu)先級
1.1 優(yōu)先級圖表
1.2 運算符實例
1.3 優(yōu)先級順口溜
2. 結(jié)合性
3. 參考資料
Link:http://blog.chinaunix.net/space. ... blog&id=2880933
? ? ? ? 寫代碼的時候,常會翻看的一個表就是“c語言運算符優(yōu)先級表”。c的運算符優(yōu)先級常常很讓人頭疼。其實,在大學里學習c的時候,老師告訴大家這個不用一定背下來,用的時候可以找書,或者加小括號就可以了。我聽了,但是后來發(fā)現(xiàn)錯了。很多人都聽了,但不是每個人都發(fā)現(xiàn)這是錯的。以至于有人覺得把優(yōu)先級背下來是“沒事閑的”(http://zhidao.baidu.com/question/155120432.html?an=0&si=1)。

0. 為什么要掌握優(yōu)先級
? ? ? ? 想想這兩個問題:
? ? ? ? ? ? ? ? a. 讀別人的代碼,遇到優(yōu)先級問題看不懂,怎么辦?
? ? ? ? ? ? ? ? b. 一堆的括號,美觀嗎?
? ? ? ? ? ? ? ? 本想貼一張畫來裝飾墻壁,卻用了一堆紙來固定!?
? ? ? ? ? ? ? ? 有人說代碼寫多了,自然就會了。這個是很寬泛的說法。看你寫的代碼的水準,有些東西可能你一直都接觸不到,何談熟練。有些東西一定要梳理,總結(jié)。

1. 優(yōu)先級

1.1 優(yōu)先級圖表


? ? ? ? 優(yōu)先級最高者不是真正意義上的運算符,包括:數(shù)組下標,函數(shù)調(diào)用,結(jié)構(gòu)體成員選擇符。
? ? ? ? 單目運算符的優(yōu)先級次之。(! ~ ++ -- - (type) * & sizeof)
? ? ? ? 然后是雙目運算符。雙目運算符里, 算數(shù)運算符(* / % + -)優(yōu)先級最高, 移位(<< >>)次之, 關(guān)系運算符(< <= > >= != ==)再次之, 接著是位運算符(& ^ | ),邏輯運算符(&& ||) 條件運算符(?: 三目),賦值運算符(= ...)。
? ? ? ? 任何一個邏輯運算符的優(yōu)先級低于任何一個關(guān)系運算符。
? ? ? ? 移位運算符的優(yōu)先級比算數(shù)運算符要低,但是比關(guān)系運算符要高。

1.2 運算符實例
? ? ? ? a. while (c = getc(in) != EOF)
? ? ? ? ? ? ? ? putc(c, out)
? ? ? ? ? ? ? ? 循環(huán)的意思是復制一個文件到另一個文件。但是由于!=的優(yōu)先級比賦值運算符的優(yōu)先級高,所以c被賦予了getc()的返回值與EOF比較后的布爾值,結(jié)果向out中寫入了一堆1.
? ? ? ? b. 解釋下面幾個聲明

  • ? ? ? ? char *p[];?
  • ? ? ? ? char (*p)[];
  • ? ? ? ? int *fp();
  • ? ? ? ? int (*fp)();
  • ? ? ? ?
  • 復制代碼 char *p[]
    ? ? ? ? ? ? ? ? 常常被錯誤的理解為指向字符數(shù)組的指針。
    ? ? ? ? ? ? ? ? 正確的是p一個數(shù)組,里面元素是指向字符的指針類型。
    ? ? ? ? char (*p)[]
    ? ? ? ? ? ? ? ? p是指向指向字符數(shù)組的指針。
    ? ? ? ? int *fp()
    ? ? ? ? ? ? ? ? 常常錯誤理解為函數(shù)指針,該函數(shù)返回int類型。
    ? ? ? ? ? ? ? ? 正確的是fp是一個函數(shù),他返回一個執(zhí)行int的指針。
    ? ? ? ? int (*fp)()
    ? ? ? ? ? ? ? ? fp是函數(shù)指針,該函數(shù)返回int類型。
    ? ? ? ??
    ? ? ? ? c. 解釋下面的表達式
  • ? ? ? ? *p.f;
  • ? ? ? ? val & mask != 0;
  • ? ? ? ? max = val1 > val2 ? val1 : val2;
  • ? ? ? ?
  • 復制代碼 *p.f
    ? ? ? ? ? ? ? ? 對p去f偏移,作為指針,然后進行解引用。相當與*(p.f),因為.的優(yōu)先級高與*。比較(*p).f。
    ? ? ? ? val & mask != 0
    ? ? ? ? ? ? ? ? 相當與val & (mask != 0).
    ? ? ? ? max = val1 > val2 ? val1 : val2
    ? ? ? ? ? ? ? ? 相當與 max = (val1 > val2 ? val1 :val2).
    ? ? ? ??
    ? ? ? ? d. 一個復雜的聲明
  • ? ? ? ? char *(* c[10])(int **p);
  • ? ? ? ?
  • 復制代碼 1. 有兩個小括號,小括號的結(jié)合行是自左向右,所以我們先關(guān)注第一個小括號,簡化聲明(*c[10])();
    ? ? ? ? ? ? ? ? c是一個數(shù)組,里面放10指針,后面緊跟這一個括號,所以這些指針是函數(shù)指針。
    ? ? ? ? 2. 關(guān)注第二個括號,(int **p)
    ? ? ? ? ? ? ? ? 顯然p是函數(shù)的參數(shù),它是個指向指針的指針。
    ? ? ? ? 3. 這看最前面的*
    ? ? ? ? ? ? ? ? char *說明該函數(shù)的返回值是一個指向字符的指針。
    ? ? ? ? 4. 這個聲明的意思就是:c是一個數(shù)組,里面有10個函數(shù)指針,指向的函數(shù)返回指針,指向字符,函數(shù)的參數(shù)是指向int類型指針的指針。

    1.3 優(yōu)先級順口溜
    ? ? ? ? 醋壇酸味灌
    ? ? ? ? 味落跳福豆

    ? ? ? ? 共44個運算符

    ? ? ? ? 醋-初等,4個: ( ) [ ] -> 指向結(jié)構(gòu)體成員 . 結(jié)構(gòu)體成員
    ? ? ? ? 壇-單目,9個: ! ~ ++ -- -負號 (類型) *指針 &取地址 sizeof長度
    ? ? ? ? 酸-算術(shù),5個: * / % + -減
    ? ? ? ? 味-位移,2個: << >>
    ? ? ? ? 灌-關(guān)系,6個: < <= > >= == 等于 != 不等于
    ? ? ? ? 味-位邏,3個: & 按位與 ^ 按位異或 | 按位或
    ? ? ? ? 落-邏輯,2個: && 邏輯與 || 邏輯或
    ? ? ? ? 跳-條件,1個,三目: ? :
    ? ? ? ? 福-賦值,11個: = += -= *= /= %= >>= <<= &= ^= |=
    ? ? ? ? 豆-逗號,1個: ,?

    2. 結(jié)合性
    ? ? ? ? 在標準C語言的文檔里,對操作符的結(jié)合性并沒有作出非常清楚的解釋。一個滿分的回答是:它是仲裁者,在幾個操作符具有相同的優(yōu)先級時決定先執(zhí)行哪一個。
    ? ? ? ? 看例子:
  • ? ? ? ? int a, b = 1, c = 2;
  • ? ? ? ? a = b = c;
  • ? ? ? ?
  • 復制代碼 這個表達式只有賦值符,這樣優(yōu)先級就無法幫助我們呢決定哪個操作先執(zhí)行。如果a = b先執(zhí)行,然后 b = c執(zhí)行。那么a最終取1。如果b = c先執(zhí)行, a = b后執(zhí)行,那么a最終取2。到底哪一個先執(zhí)行?看結(jié)合性,復制的結(jié)合性是右至左,所以b = c,然后a = b。
    ? ? ? ? 同級的操作符,結(jié)合性相同。如果在計算表達式的值時候需要考慮結(jié)合性,那么最好把這個表達式一分為二。

    3. 參考資料
    ? ? ? ? 《c Traps and Pitfalls》 Andrew Koenig著, ISBN 978-7-115-17179-5
    ? ? ? ? 《c 專家編程》 Peter Van Der Linden 著, ISBN 978-7-115-17180-1
    ? ? ? ? 順口溜? http://blog.sina.com.cn/s/blog_4e64e2290100be0z.html

    總結(jié)

    以上是生活随笔為你收集整理的C运算符优先级的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。