不學 JAVA 換學 C# 之覺得心累 - L1:ch4 運算子與邏輯

AdSense

前言

程式是用來執行運算的工具,因此大部分程式語言的運算類別都大同小異:算術運算、比較運算、邏輯運算、賦值運算、條件 (三元) 運算,等等。

而操作符號就稱作運算子。

不同的運算子之間有優先順序

算術運算子 (Arithmetic Operators)

基本的數學運算。

運算子 說明 範例 結果
+ 加法 3 + 2 5
- 減法 3 - 2 1
* 乘法 3 * 2 6
/ 除法 6 - 2 3
% 取餘數 5 % 2 1
++ 遞增(加 1) x++ 或 ++x x+1
-- 遞減(減 1) x-- 或 --x x-1

註:++x 運算速度會比 x++ 快。

比較運算子 (Comparison Operators)

比較兩個值,結果為布林值 truefalse

運算子 說明 範例 結果
== 等於 5 == 5 true
!= 不等於 5 != 5 false
> 大於 5 > 3 true
< 小於 5 < 3 false
>= 大於或等於 5 >= 3 true

邏輯運算子 (Conditional Logical Operators)

布林值的邏輯運算。不知道邏輯運算的人請參考真值表

運算子 說明 範例 結果
&& 且 (AND) true && false false
|| 或 (OR) true || false true
! 非 (NOT) !true false

邏輯運算當中會用到短路求值 (Short-circuit evaluation) 的策略,又稱最小化求值:只有當第一個運算數的值無法確定邏輯運算的結果時,才對第二個運算數進行求值。

例如:因為 && 要兩邊同時為 true,結果才會是 true。所以當 && 左邊的值為 false 時,可以馬上斷定,結果一定為 false,不用對 && 右邊進行計算求值。

例如:因為 || 只要一邊為 true,結果就會是 true。所以當 || 左邊的值為 true 時,可以馬上斷定,結果一定為 true,不用對 || 右邊進行計算求值。

補充

& 運算子

也可以用來當布林值的邏輯運算子,和 && 產生一樣的結果,差別是它不會用到短路求值,左右兩邊都一定會計算到。

& 運算子的類型:

  • 布林值邏輯運算子
  • 整數位元邏輯運算子
  • 傳址運算子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 整數位元邏輯運算
uint a = 1010_1010;
uint b = 1011_0101;
uint c = a & b; // 10100000

// 傳址運算子
unsafe
{
int number = 10;
int* pointerToNumber = &number; // 使用 & 符號取得變數 number 的記憶體位址
Console.WriteLine($"{number}, {(long)pointerToNumber:X}");
}

// 輸出結果:
// 27, 6C1457DBD4

| 運算子

也可以用來當布林值的邏輯運算子,和 || 產生一樣的結果,差別是它不會用到短路求值,左右兩邊都一定會計算到。

| 運算子的類型:

  • 布林值邏輯運算子
  • 整數位元邏輯運算子
1
2
3
4
// 整數位元邏輯運算
uint a = 1010_1010;
uint b = 1011_0101;
uint c = a | b; // 10111111

參考資料:
位元與移位運算子 (C# 參考) - 邏輯 AND 運算子 &
指標相關運算子 - 傳址運算子 &
位元與移位運算子 (C# 參考) - 邏輯 OR 運算子 |

賦值運算子 (Assignment Operators)

將值賦予變數。

運算子 說明 範例 結果
= 賦值 x = 10 x = 10
+= 加法後賦值 x += 5 x = x + 5
-= 減法後賦值 x -= 3 x = x - 3
*= 乘法後賦值 x *= 2 x = x * 2
/= 除法後賦值 x /= 2 x = x / 2

條件 (三元) 運算子 (Ternary Conditional Operator)

? 前的結果為 true,返回 : 左邊的值,結果為 false,返回 : 右邊的值。

運算子 說明 範例 結果
? : 條件判斷和簡化 if-else x > y ? x : y 較大的值