【整理自用】計算機運算符

運算優先級記憶

運算優先級

從下向上:

逗號是最低的;
所有和賦值運算有關的運算符優先級都是最低的。(=,<=,+=,<<=等等)
與、或等邏輯運算(但非運算等級是第二位的)
表達式之間的關係運算(==,!=,<=,>=)
四則運算(數之間的運算,包括<<,>>)。
單目運算符(++,–,~,!)等
與指針有關的,數組有關的([],&,->)。

運算符部分特殊

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。我開始都沒在題目答案中找到 t=1 這個答案,這也是答錯的重要原因。
2. 運算優先級,賦值運算優先級是很低的。
3. ||,只要前一個表達式爲真,則後面一個表達式不做運算了;不然纔會繼續進行後面表達式的計算。同理&&,若前一個表達爲假,則不會繼續對後面的表達式進行計算了。
答案: t=1,y=2 .


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章