目錄
一、錯誤案列
二、優先級規律
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.優先級表
[結合性指的是編譯器解釋的順序。例如: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
小提醒:在涉及指派操作符時和容易發生錯誤,要考慮有無必要加上()