邏輯運算符: &&, ||, !
邏輯表達式:條件表達式1 &&(||) 條件表達式2
&& 運算規則:只有條件表達式1,2都為True時結果才為True
|| 運算規則:只要一個條件表達式為True,結果為True
!運算規則:條件表達式的值為True時,結果為False,值為False是,結果為True
算術運算符、關系運算符、邏輯運算符優先級
A !為單目運算符,優先級比算術運算符、關系運算符高
B. 算術運算符號的優先級比關系、邏輯運算符優先級高
C 邏輯運算符&& 和||的優先級要比關系運算符低!(通常表達式1和表達式2就是關系運算符,所有先進行關系運算,然后進行邏輯運算)
按元划分運算優先級:括號優先級> 一元運算符號優先級>二元運算符號優先級>三元運算符號優先級
// 括號的不同寫法 int result = (3+4) * 5; int result2 = (int) 3.14 + 4; //7, 與double result3 = 3.14 + 4 結果為7.14不同是因為括號的優先級!
按運算符類型划分:括號優先級> 算術運算符> 關系運算符> 邏輯運算符
注意:運算符優先級大於賦值運算符
典雅小築吧:C#運算符優先級表(http://tieba.baidu.com/f?kz=869790562#)
與或的短路問題
與短路:當第一個表達式的值為False時候,第二個表達式不會運行
或短路:當第一個表達式的值為True時候,第二個表達式不會運行。
與或短路的結果,如果表達式中存在變量賦值運算,那么就不會執行運算而得不到想要的結果!
// 與或的短路問題 int num1 = 10; int num2 = 5; bool result = ++num1 == 10 && ++num2 > 1; // 與短路,第一個False后面就不會參加運算 Console.WriteLine("num1 = {0}, num2 = {1}", num1, num2); // num1 = 11, num2 = 5 bool result2 = ++num1 != 5 || ++num2 > 1; // 或短路,第一個True后面就不會參加運算 Console.WriteLine("num1 = {0}, num2 = {1}", num1, num2); // num1 = 12, num2 = 5