我們在 3-1 變數與基本常用的型別 談到變數定義的時候,有說過:
=運算子的意義是:將右邊的值指定給左邊的變數
int i = 3;
float f = 7.5f;
我們可以先進行一些資料計算與處理,然後將指定的值透過=運算子指定給變數。
以下就來介紹這些運算子。
算法運算
● +運算子:通常是數學上將2個數值相加的功能
● -運算子:通常是數學上將2個數值相減的功能
● *運算子:通常是數學上將2個數值相乘的功能
● /運算子:通常是數學上將2個數值相除的功能
int i1 = 3 + 1; ( i1 = 4 )
float f2 = 0.5f – 0.25f; ( f2 = 0.25f )
int i3 = 9 * 6; ( i3 = 54 )
int i4 = 9 / 3; ( i4 = 3 )
此外,string型別也能使用+運算子,其功能是將2個字串合併,例如:
string s = “Hello” + ” ” + “World” + “!”;
( s = “Hello World!” )
注意:/運算子在整數的細節
思考一下這個例子:
int i = 9 / 6;
請問 i 等於多少?
9 / 6 在數學是 1.5,
9 / 6 在程式的整數,不可能是 1.5,
因為整數是不會有小數點的。
在C#,這時候會做無條件捨去小數點以下的數字成為整數。
例如:
int a = 9 / 6;
( a = 1,從 1.5 無條件捨去小數點以下的數字)int b = -9 / 6;
( b = -1,從 -1.5 無條件捨去小數點以下的數字)
算法指派
既然介紹完算法運算,來介紹+=這個運算子
x = x + y
可以縮寫成
x += y
同理,-= *= /= %=也有一樣的邏輯。
遞增與遞減運算
● ++x:前置遞增,將 x 加上整數 1,然後回傳新的 x
● –x:前置遞減,將 x 減去整數 1,然後回傳新的 x
● x++:後置遞增,先保留 x 的值,將 x 加上整數 1,然後回傳舊的 x
● x–:後置遞減,先保留 x 的值,將 x 減去整數 1,然後回傳舊的 x
int x = 3;
int y = ++x; (x = 4, y = 4)
y = x++; (x = 5, y = 4)
y = x++ * 2; (x = 6, y = 10)
請注意前置與後置的差異:
你可以想像成前置是先做遞增減,再做其它運算;
而後置是先拿原數值做運算,再做遞增減。
關係與等號運算
相關的運算子有>, <, >=, <=, ==, !=,與數學上的用法類似,會回傳bool來表達正確性。
● >運算子:大於
● <運算子:小於
● >=運算子:大於或等於
● <=運算子:小於或等於
● ==運算子:等於 (注意==和=這2個運算子是不一樣的)
● !=運算子:不等於
例如:
int a1 = 1;
int a2 = 2;
int a3 = 3;
int a4 = 4;bool b1 = a1 > a4; ( b1 = false )
bool b2 = a1 < a3; ( b2 = true )
bool b3 = a4 >= 4; ( b3 = true )
bool b4 = a1 <= 0; ( b4 = false )
bool b5 = a2 == 2; ( b5 = true )
位移運算
● x << y:整數型別限定,將x的位元全部向左移y位,超出的位元即捨棄,空白位元補上0
● x >> y:整數型別限定,將x的位元全部向右移y位,超出的位元即捨棄,空白位元補上0
int a = 9 << 2; ( a = 40 )
( 0000 1010 -> 0010 1000 )int b = 9 >> 2; ( b = 2 )
( 0000 1010 -> 0000 0010 )
與算法指派相同,也有邏輯指派的運算子 <<= >>=
邏輯運算
● &運算子:整數的位元AND,或是布林值的AND
● ^運算子:整數的位元XOR,或是布林值的XOR
● |運算子:整數的位元OR,或是布林值的OR
與算法指派相同,也有邏輯指派的運算子 &= ^= |=
條件邏輯
● &&運算子:內建是bool型別限定的運算子,與數學上的AND定義相同
如果左邊的運算結果是false,則直接回傳false。
如果左邊的運算結果是true,則回傳右邊的計算結果。
● ||運算子:內建是bool型別限定的運算子,與數學上的OR定義相同
如果左邊的運算結果是true,則直接回傳true。
如果左邊的運算結果是false,則回傳右邊的計算結果。
注意:
以上運算子跟 &, | 這2個運算子的整體邏輯乍看沒有什麼不一樣,
但請注意 && 與 || 的算法是,先判斷左邊的運算元,有需要才判斷右邊的運算元
需要判斷條件時,通常會選擇 && 和 ||。
運算優先度
我們讀小學的時候都學過的「先乘除,後加減」以及「括號」,在C#也有一樣的作用。
只是C#的運算子很多,這裡列出基本常用的運算子優先度。
下表將優先度從上到下,由高到低排列,越上面的優先度越高,同一層級的運算子有相同的優先度。
一元運算子:+x -x !x ~x ++x –x
乘法運算子:* / %
加法運算子:+ –
移位運算子:<< >>
關係運算子:< > <= >=
等號運算子:== !=
邏輯AND運算子:&
邏輯XOR運算子:^
邏輯OR運算子:|
條件AND運算子:&&
條件OR運算子:||
指派運算子:= += -= *= /= %= &= |= ^= <<= >>=