author: selfimpr
blog:
mail: [email protected]
閱讀另由於是php程式設計師, 所以對php的對應優先順序做類似分析.
最後是用php和c中的?:結合性的不同解釋"結合性"的問題.
不正確的地方請各位指出.
* c語言運算子優先順序(共計15個等級)
1. 非運算子(函式呼叫, 復合資料結構取元素): "()", "", "->", "."
2. 單目運算子: "!", "~", "++", "--", "-", "(type)"(型別轉換), "*", "&", "sizeof"
3. 雙目運算子:
1) 算術運算子:
a) 乘除: "*", "/", "%"
b) 加減: "+", "-"
2) 移位運算子: "<<", ">>"
3) 關係運算子:
a) 大小比較: "<", "<=", ">", ">="
b) 相等比較: "==", "!="
4) 邏輯運算子:
a) 按位邏輯運算子:
* 按位與: "&"
* 按位異或: "^"
* 按位或: "|"
b) 順序邏輯運算子:
* 短路與: "&&"
* 短路或: "||"
4. 三目運算子: "?:"
5. 賦值運算子: "=", "*=", "/=", "%=", "+=", "-=", ...等等
6. 逗號運算子: ","
* c語言運算子結合性:
1. 右結合: 單目運算子, 三目運算子, 賦值運算子
2. 左結合: 第一條未列出所有運算子為左結合
* php運算子優先順序(共計22個等級)
1. 非運算子(復合資料結構取元素, 特殊運算子):
1) 物件建立: "clone", "new"
2) 取復合結構元素: ""
2. 單目運算子:
1) 自增自減: "++", "--"
2) 型別轉換, 錯誤抑制符, 取反運算子, 負號: "(type)"(型別轉換), "@", "~", "-"
3) 型別判定符: "instanceof"
4) 邏輯非: "!"
3. 雙目運算子:
1) 算術運算子:
a) 乘除: "*", "/", "%"
b) 加減: "+", "-"
2) 移位運算子: "<<", ">>"
3) 關係運算子:
a) 大小比較: "<", "<=", ">", ">="
b) 相等比較: "==", "!=", "===", "!=="
4) 邏輯運算子:
a) 按位邏輯運算子:
* 按位與: "&"
* 按位異或: "^"
* 按位或: "|"
b) 順序邏輯運算子:
* 短路與: "&&"
* 短路或: "||"
4. 三目運算子: "?:"
5. 賦值運算子: "=", "*=", "/=", "%=", "+=", "-=", ...等等
6. 低優先順序邏輯運算子:
* 與: "and"
* 異或: "xor"
* 或: "or"
7. 逗號運算子: ","
* php運算子結合性:
1. 無結合性: 物件建立, 自增自減, 型別判定符, 關係運算子
2. 右結合: 第一條中沒有列出的單目運算子, 賦值運算子
3. 左結合: 前面兩條未列出的所有運算子均為左結合
* c語言和php中的三目運算子結合性差異比較
1. c語言中"?:"為右結合
2. php中"?:"為左結合
3. 例項: printf("%d\n", 1 ? 2 : 3 ? 4 : 5);
1) c語言中解析: 先運算最後乙個"?:", 將最後乙個?之前的表示式看作整體
printf("%d\n", (1 ? 2 : 3) ? 4 : 5);
/* 結果: 4 */
2) php中解析: 先運算第乙個"?:", 將第乙個:之後的表示式看作整體
printf("%d\n", 1 ? 2 : (3 ? 4 : 5));
/* 結果: 2 */
C語言運算子優先順序 之 快速記憶
先摘錄譚浩強 c程式設計 對運算子優先順序的兩點說明 1.同一優先順序的運算子,運算次序由結合方向來決定。例如 a 與 具有相同的優先級別,其結合方向為自左向右,因此3 5 4的運算次序是先乘後除 b 和 為同一優先順序,結合方向為自右向左,因此 i 相當於 i 2.從上述表中可以大致歸納出各類運算...
C語言 運算子與 運算子
我們平時使用帶參巨集時,字串中的巨集引數是沒有被替換的。例如 輸出結果為 然而,我們期望輸出的結果是 5 20 2513 14 27 這該怎麼做呢?其實,c語言允許在字串中包含巨集引數。在類函式巨集 帶參巨集 中,號作為乙個預處理運算子,可以把記號轉換成字串。例如,如果a是乙個巨集形參,那麼 a就是...
C語言 運算子和 運算子
變數 代表 取變數的位址 變數 代表 指標型的變數 取址運算子 用來取得其運算元的位址。如果運算元 x 的型別為 t,則表示式 x 的型別是 t 型別指標 指向 t 的指標 取址運算子的運算元必須是在記憶體中可定址到的位址。換句話說,該運算子只能用於函式或物件 例如左值 而不可以用於位欄位,以及那些...