這一篇我們來講解C#中的運算符
1. C#中的算術運算符
5個算數運算符:+ - * / %
它們都是二元運算符,* / % 的運算優先級相同,并且高于 + - ,+ - 的運算優先級也是相同的。我們可以通過小括號來改變計算的優先級,注意:小括號一定要成對出現。
運算符兩邊的操作數的類型,要求一致,運算得到的結果也會與操作數的類型一致。
int x = 10, y = 3; //得到的結果是 3 Console.WriteLine("num = {0}", x / y * 1.0);
x / y * 1.0 這個表達式,先計算 x/y ,得到結果為3, 3再乘以1.0,結果是3.0,但輸出的時候,不會輸出3.0,而是3
double vvv = 3 * 1.0; //得到結果是 3 Console.WriteLine("vvv = {0}",vvv);
int類型 乘以 double類型,結果是會被自動轉換成double類型。
int x = 10, y = 3; //得到的結果是 3.33333333333333 Console.WriteLine("num = {0}", x / (y * 1.0));
2. C#中的賦值運算符
6個賦值運算符: = += -= *= /= %=
它們在進行運算時,要求參與運算的操作數的類型必須相同,并且其運算結果也與操作數的類型相同。假如,參與運算的操作數的類型不一致時,會根據類型自動轉換規則進行轉換。
這6個運算符的優先級都相同,在所有運算符中優先級是最低的。
3. C#中的邏輯運算符
3個邏輯運算符: &&(且) ||(或) !(非)
只有 ! 是一元運算符,其他的都是二元運算符
優先級 ! > && > ||
參與運算的必須是計算結果為bool類型的表達式,如 4 > 2
(表達式) && (表達式) 只有當兩個表達式全為true的時候,結果才為true
(表達式) || (表達式) 只有當兩個表達式全為false的時候,結果才為false
!(表達式) 進行取反操作,表達式為true的時候,結果為false;反之為true
注意: && || 會出現短路的情況
int a = 10; int b = 5; //當邏輯與中前面一個表達式的結果為false,后面那個表達式就不參與運算了,造成短路 bool result = ++a > 50 && ++b > 1; Console.WriteLine("a = {0} b = {1}",a,b); //a = 11 b = 5 //當邏輯或中前面一個表達式的結果為true,后面那個表達式就不參與運算了,造成短路 bool res = ++a < 50 || ++b < 1; Console.WriteLine("a = {0} b = {1}", a, b); //a = 12 b = 5
4. C#中的關系運算符
6個關系運算符: > < == != >= <=
它們的運算結果都是bool類型,參與運算的操作數的類型也必須相同。
5. C#中的自增、自減運算符
包括這兩種: ++ -- 運算符在操作數前后的位置又可以分為前置和后置
后置的優先級高于前置
1. 后置
當number++ 或 number-- 參與表達式運算時,由于運算符在number后面,所以在運算時,先用number的值參與表達式的運算,再將number的值+1 或 -1。
int res = 10 + number++; 我們可以理解成: int res = 10 + number; number = number + 1;
于是我們得到結論:++ -- 后置的時候,先使用變量原有的值,再執行++ -- 的運算。
int age = 18; int sum = (age++ + 12) * 3 - 10; //上面這句話相當于 //int sum = (age + 12) * 3 - 10; //age++; Console.WriteLine("age = {0}", age); // age = 19 Console.WriteLine("sum = {0}", sum); // sum = 80
2. 前置
當++number 或 -- number參與表達式運算時,由于運算符在number前面,所以在運算時,先將number的值+1 或 -1,再用number的值參與表達式的運算 。
int res = 10 + ++number; 我們可以理解成: number = number + 1; int res = 10 + number;
例子:
int var1, var2 = 5, var3 = 6; var1 = var2++ * --var3; //var1 = 25,var2 = 6,var3 = 5 Console.WriteLine("var1 = {0},var2 = {1},var3 = {2}", var1, var2, var3); var1 = 0; var2 = 5; var3 = 6; var1 = ++var2 * var3--; //var1 = 36,var2 = 6,var3 = 5; Console.WriteLine("var1 = {0},var2 = {1},var3 = {2}", var1, var2, var3);
6. C#中三元運算符
語法: 條件 ? 結果1 : 結果2
int a = 2; int c = 3; int b = (a>c) ? a : c; // b 的值為3
與 if - else語句等價
int a = 2; int c = 3; int b; if ( a > c ) { b = a; } else { b = c; }
7. C#中運算符表
按照運算符的優先級進行排列
這里列舉一些常用的運算的優先級,下面按照從高到低的順序排列了運算符的優先級。關于運算符的詳細情況,請查閱 https://msdn.microsoft.com/zh-cn/library/ms173145.aspx
算術運算符中 * / % 的優先級高于 + -
8. C#中運算符的結合性
按方向來分,分為左結合和右結合
左結合運算符按從左到右的順序計算。 例如,x * y / z 將計算為 (x * y) / z。 右結合運算符按從右到左的順序計算。 例如,賦值運算符是右關聯的。
賦值運算符和三元運算符 (?:) 是右結合運算符。 其他所有二元運算符都是左結合運算符。
無論表達式中的運算符是左結合運算符還是右結合運算符,都將先從左至右評估各表達式的操作數。
9. C#中運算符重載
對于自定義類和結構,你可以更改運算符的行為。 此過程稱為“運算符重載”。
文章列表