嗨嗨~
今天登場的就是運算子精靈啦~
運算子精靈可是大家族呢!
有算術運算子、關係運算子、邏輯運算子、位元運算子、移位運算子、複合指定運算子、遞增遞減運算子
算術運算子
運算子符號 | 運算子 | 運算式 | 若j = 20 k = 3 下列i結果 |
---|
+ | 相加 | i = j + k | i = 23 |
- | 相減 | i = j - k | i = 17 |
* | 相乘 | i = j * k | i = 60 |
/ | 相除 | i = j / k | i = 6 |
% | 取餘數 | i = j % k | i = 2 |
範例:
int i, j = 20, k = 3;
Console.WriteLine(i = j + k);
Console.WriteLine(i = j - k);
Console.WriteLine(i = j * k);
Console.WriteLine(i = j / k);
Console.WriteLine(i = j % k);
結果:
關係運算子
關係運算子 | 意義 | 數學式 | 關係運算式 |
---|
== | 等於 | = | A==B |
!= | 不等於 | ≠ | A!=B |
> | 大於 | > | A>B |
< | 小於 | < | A<B |
>= | 大於或等於 | ≥ | A>=B |
<= | 小於或等於 | ≤ | A<=B |
範例:
bool Boolean = false;
int A = 10, B = 10;
Boolean = A == B;
Console.WriteLine("A=B -> " + Boolean);
Boolean = A != B;
Console.WriteLine("A≠B -> " + Boolean);
Boolean = A > B;
Console.WriteLine("A>B -> " + Boolean);
Boolean = A < B;
Console.WriteLine("A<B -> " + Boolean);
Boolean = A >= B;
Console.WriteLine("A>=B -> " + Boolean);
Boolean = A <= B;
Console.WriteLine("A<=B -> " + Boolean);
邏輯運算子
邏輯運算子 | 意義 | 邏輯運算式 | 用法 |
---|
&& | 且(AND) | A&&B | 當A跟B都為true時,結果才為true |
|| | 或(OR) | A||B | 若A、B其中一個為true,結果為true |
! | 非(NOT反相) | !A | 若A為true,結果為false。若A為false,結果為true。 |
範例:
bool Boolean = false, A = true, B = false;
Console.WriteLine("A= " + A + " B= " + B);
Boolean = A && B;
Console.WriteLine("A&&B -> " + Boolean);
Boolean = A || B;
Console.WriteLine("A||B -> " + Boolean);
Boolean = !A;
Console.WriteLine("!A -> " + Boolean);
位元運算子
&(AND)、|(OR)、^(XOR)、~(NOT)為位元運算子,運算方式如下:
A B | A&B | A|B | A^B | ~A |
---|
0 0 | 0 | 0 | 0 | 1 |
0 1 | 0 | 1 | 1 | 1 |
1 0 | 0 | 1 | 1 | 0 |
1 1 | 1 | 1 | 0 | 0 |
移位運算子
移位運算子可用來做數值運算,做法是先將指定的運算元轉成二進位,接著使用">>"或"<<"來進行右移或左移幾個位元。
複合指定運算子
運算子符號 | 意義 | 實例 |
---|
= | 指定 | i = 10 |
+= | 相加後再指定 | i += 5 |
-= | 相減後再指定 | i -= 5 |
= | 相乘後再指定 | i= 2 |
/= | 相除後再指定 | i /= 2 |
%= | 取餘數後再指定 | i %= 3 |
^= | 做位元的XOR運算再指定 | i ^= 5 |
&= | 做位元的AND運算再指定 | i &= 5 |
|= | 做位元的OR運算再指定 | i |= 5 |
<<= | 左移指定運算 | i <<= 5 |
>>= | 右移指定運算 | i >>= 5 |
遞增遞減運算子
++遞增和--遞減兩者都是屬於單元運算子,如i = i + 1
可寫成i++
,i = i - 1
可寫成i--
。若將遞增/遞減運算子放在變數前表示前遞增/遞減,放之後則表示後遞增/遞減。
int i = 5, k;
k = i++; //結果K=5,i=6。相當於先執行k=i,再執行i++
Console.WriteLine("k=" + k);
Console.WriteLine("i=" + i);
int i = 5, k;
k = ++i; //結果K=6,i=6。相當於先執行i++,再執行k=i
Console.WriteLine("k=" + k);
Console.WriteLine("i=" + i);
int i, j, k;
i = j = 15; //先將15指定給j,再將j值指定給i,i和j都是15
Console.WriteLine("i=" + i + " j=" + j);
k = ++i * 5; //先將i+1=16,再將i*5=80,最後指定給K
Console.WriteLine("i=" + i + " k=" + k);
j = k++ * 2; //先將K(=80)*2指定給j,j=160,再將k+1=81
Console.WriteLine("k=" + k + " j=" + j);
運算子精靈的家族就介紹到這裡啦,既然是家族,那就代表會有老幼順序(優先順序),下表是運算子的優先順序,要特別注意喔~
優先次序 | 運算子 | 運算次序 |
---|---|---|
1 | x.y、f(x)、a[x]、x++、x--、new、、() | 由內至外 |
2 | !、~、(cast)、+(正)、-(負)、++x、--x | 由內至外 |
3 | *、/、% | 由左至右 |
4 | +(加)、-(減) | 由左至右 |
5 | >>、<< | 由左至右 |
6 | <、<=、>、>= | 由左至右 |
7 | ==、!= | 由左至右 |
8 | &(邏輯AND) | 由左至右 |
9 | ^(邏輯XOR) | 由左至右 |
10 | |(邏輯OR) | 由左至右 |
11 | &&(條件AND) | 由左至右 |
12 | ||(條件OR) | 由左至右 |
13 | ?: | 由右至左 |
14 | =、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、!= | 由右至左 |
15 | ,(逗號) | 由左至右 |
參考資料:
Visual C# 2015 程式設計經典