天天看點

C經典書籍筆記——C陷阱與缺陷②(文法陷阱之優先級)一、錯誤案列 二、優先級規律

目錄

一、錯誤案列

 二、優先級規律

1.優先級表 

2.優先級總結

一、錯誤案列

1.flag的二進制表達式中隻有一個1,現在判斷flags二進制形式在flag為1的那一位上是否也為1:

if(flag & flags !=0);
           

2.将getc函數的傳回值賦給c并判斷是否為EOF:

while(c=getc(in)!=EOF);
           

3.類似2的問題再複雜些:

if(t=BTYPE(pt1->aty)==start || t==UNION);
           

以上都是有優先級問題的代碼,你都能發現他們的問題嗎,如果不能,來看看下面對優先級的解讀和記憶。

 二、優先級規律

1.優先級表 

C經典書籍筆記——C陷阱與缺陷②(文法陷阱之優先級)一、錯誤案列 二、優先級規律

[結合性指的是編譯器解釋的順序。例如:a,b,c自左向右解釋為(a,b)c 而不是a,(b,c) ]

2.優先級總結

①()[ ]  -> . 這類非運算符優先級為1 。

②單目操作符優先級為2,類型轉化也是單目操作符哦。        (自右至左)

③雙目操作符優先級為3,其中

 1.算數操作符(% / *) > (+ -)        

 2.移位操作符(>>  <<)

 3.關系操作符(> ,< , >= ,<= )> (==  !=)

 4.位操作符(& > ^ > |)

 5.邏輯操作符(&& > ||)

 6.指派操作符(=  +=  -=  &= ……)        (自右至左)

④三目操作符優先級為4,(?:)        (自右至左) [例如:(a?b,(c?,d,e ) )]

⑤,優先級為5

小提醒:在涉及指派操作符時和容易發生錯誤,要考慮有無必要加上()