[.net 面向對象編程基礎] (6) 基礎中的基礎——運算符和表達式
說起C#運算符和表達式,小伙伴們肯定以為很簡單,其實要用好表達式,不是一件容易的事。一個好的表達式可以讓你做事半功倍的效果,比如三元表達式,可以讓你少寫N多個if和case語句。
表達式 由 操作數(operand) 和 運算符(operator) 構成
1.運算符分類和優先級
2.運算符按操作數目分類
一元運算符 |
-x x++ x-- |
二元運算符 |
x+y x+1 |
三元運算符 |
c ? x : y |
3.表達式分類
按運算符數目可分為:一元表達式,二元表達式,三元表達式
按用途分類:正則表達式、Lambda表達式等等。
關於這些復雜類型的表達式,后續會再作詳細說明。
要點:
1. / 除法運算符 5/2=2 (並非四舍五入,而是舍去小數)
2. %取模運算符 5%2=1 5.0%2.2=0.6 (第2數整除第1數的余數)
3. ++ 遞增運算符 -- 遞減運算符
以上兩個運算符 ,可以在前也可以在后, 但是在前和在后,其執行順序不同 例如:
int a=1; int b=a++;
運算符在后,則程序先把a的值賦給b,再對a執行+1;
其運行結果為: a=2 b=1
如果寫成下面的例子:
int m=1;int n=++m;
則執行完以后結果為: m=2 n=2;
實際上相當於 int m=1; m=m+1; int n=m;
4.位移運算符<<(左移) 和 >>(右移)
這兩個運算符比較不常用,按官方的理解稍有點復雜
可以這樣理解:其實就是數據轉換成二進制的左右移動;
右移左補0,左移右補0,后面多出來的部分去掉。
如:把89右位移一位,可以這樣計算:
string flag = Convert.ToString(89, 2); //這是把你的89轉為2進制數。。
//flag結果:1011001
//你要右位移,左邊補個0,后面多出來一位去掉
int j = Convert.ToInt32("0101100", 2); //再把2進制轉化了10進制數。。
//結果:44
//位移就是這么簡單
5.邏輯異或運算符 ^
對於簡單邏輯運算符 & || 我們比較熟悉了,但對於異或好多人就 不了解,甚至很少用到
理解這個運算符,首先它雖然是邏輯運算符,但也是可以運算整數的
先說布爾運算,簡單說,就是兩個操作數不同,則為真;相同時為假
如:true ^ true=false; false^false=false; true ^false=true; false ^true=true;
操作整數時,則進行位運算,如:
100^45=73
數值運算舉例
按位異或的3個特點:
(1) 0^0=0,0^1=1 0異或任何數=任何數
(2) 1^0=1,1^1=0 1異或任何數-任何數取反
(3) 1^1=0,0^0=0 任何數異或自己=把自己置0
例如:10100001^00010001=10110000
按位異或的幾個常見用途:
(1) 使某些特定的位翻轉
例如對數10100001的第2位和第3位翻轉,則可以將該數與00000110進行按位異或運算。
10100001^00000110 = 10100111
(2) 實現兩個值的交換,而不必使用臨時變量。
例如交換兩個整數a=10100001,b=00000110的值,可通過下列語句實現:
a = a^b; //a=10100111
b = b^a; //b=10100001
a = a^b; //a=00000110
(3) 在匯編語言中經常用於將變量置零:
xor a,a
(4) 快速判斷兩個值是否相等
舉例1: 判斷兩個整數a,b是否相等,則可通過下列語句實現:
return ((a ^ b) == 0)
- 字符和字符串運算
由於字符可以隱式轉為整型,如 ‘a’+6=103 a被轉為Unicode 97
‘a’*’b’=9506 相當於 97*98
‘a’>’b’結果為false 相當於97>98 返回false
‘a’ +”早上好” 返回 “a早上好”
由此可見。不同類型運算在C#中會先執行一次隱式轉換
6.小測試
最后,來一道經常在面試的時候,超級傻B的面試題,首先我在面試的時候,絕不會出這種題。
int a = 0, b,c; b = (a++)+ 2; c= (++a) + 2; c= (a == b ? a+b : a+c); Console.WriteLine("a="+a+";b="+b+";c="+c); Console.ReadLine();
如上代碼,請問輸出結果是什么?
==============================================================================================
返回目錄
<如果對你有幫助,記得點一下推薦哦,有不明白的地方或寫的不對的地方,請多交流>
==============================================================================================