[快速記憶]C語言/php的運算符優先級(結合性)

author: selfimpr

blog: http://blog.csdn.net/lgg201

mail: [email protected]


閱讀<C陷阱與缺陷>, 看到書中對優先級記憶的精彩講解, 總結下表.

另由於是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));
			/* 結果: 2 */
		2) php中解析: 先運算第一個"?:"
			printf("%d\n", (1 ? 2 : 3) ? 4 : 5);
			/* 結果: 4 */


發佈了123 篇原創文章 · 獲贊 1149 · 訪問量 130萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章