運算優先級記憶
從下向上:
逗號是最低的; |
---|
所有和賦值運算有關的運算符優先級都是最低的。(=,<=,+=,<<=等等) |
與、或等邏輯運算(但非運算等級是第二位的) |
表達式之間的關係運算(==,!=,<=,>=) |
四則運算(數之間的運算,包括<<,>>)。 |
單目運算符(++,–,~,!)等 |
與指針有關的,數組有關的([],&,->)。 |
運算符部分特殊
1.||
和&&
運算符,記着由於爲了簡化運算,降低運算時間。所以說,.當前一個表達式結果爲真時,||
後面的表達式不做計算,可以當做後面的表達式不存在了。直接忽略。同理,當前一個表達式結果爲假時,&&
運算符後面的表達式可認爲不存在。
2. ?:
是右結合。如a>b?a:c<d?c:d
等價於a>b?a:(c<d?c:d)
優先級錯題
題目:設有定義語句
int x[6]={2,4,6,8,5,7};
int *p=x;
int i=0;
要求依次輸出x數組6個元素中的值,能完成此操作的語句是:for(i=0;i<6;i++) printf("%2d",*(p++));
分析:
儘管()是最高優先級,但是僅僅只是優先將()內的符號進行結合,而不表示一定先對()內進行計算。所以儘管有括號(),但由於*
和++
優先級相同,而且是右結合,所以事實上*(p++)
等同於*p++
。
題目:設x、y、t均爲int型變量,則執行語句後,變量t和y的值分別爲__。
t=3;
x=y=2;
t=x++||++y;
分析:
1.||
運算符與|
。前者是判斷表達式最後的結果是真是假,所以只可能是0/1。我開始都沒在題目答案中找到 這個答案,這也是答錯的重要原因。
2. 運算優先級,賦值運算優先級是很低的。
3. ||
,只要前一個表達式爲真,則後面一個表達式不做運算了;不然纔會繼續進行後面表達式的計算。同理&&
,若前一個表達爲假,則不會繼續對後面的表達式進行計算了。
答案: .