運算符號與Promotion

運算符號與型別提升(Promotion)

學習目標

  • 認識 Python 中主要的運算符號類型:算術、比較、邏輯、指派。
  • 理解「型別提升」在混合型別運算中的自動轉換機制。
  • 學會區分浮點數除法 / 與整數除法 // 的不同。
  • 掌握如何使用比較與邏輯運算符號來建立條件判斷。
  • 了解複合指派運算符號如何讓程式碼更簡潔。

第 1 章:算術運算符號 (Arithmetic Operators)

算術運算符號用於執行基本的數學計算,是你學習程式設計最先接觸到的運算符號。

運算符號 名稱 範例 結果 說明
+ 10 + 5 15
- 10 - 5 5
* 10 * 5 50
/ 除 (浮點數) 10 / 5 2.0 浮點數的商
// 整數除法  10 // 3 3 整數的商
% 模除(Modulo) 10 % 3 1 餘數
** 乘方 2 ** 3 8 2 的 3 次方

第 2 章:型別提升 (Type Promotion)

當你對兩種不同數字型別的資料進行運算時,會發生什麼事?例如,一個整數 (int) 和一個浮點數 (float) 相加?

為了避免遺失精度 (例如小數點後的數字),Python 會自動將「整數」的型別提升為「浮點數」的型別,這個過程稱為型別提升 (Type Promotion)

運算流程解析:5 + 2.5

  1. Python 偵測到兩個運算元:5 (型別為 int) 和 2.5 (型別為 float)。
  2. Python 決定將結果提升為 float
  3. 它在內部呼叫 float(5), 建立值為 5.0 的 float物件。(不是轉換,5 仍然存在)
  4. 最後,執行 5.0 + 2.5 的浮點數運算。
  5. 得到最終結果 7.5,其型別為 float
result = 5 + 2.5
print(result)
print(type(result))

輸出結果:

7.5
<class 'float'>

第 3 章:比較運算符號 (Comparison Operators)

比較運算符號用於比較兩個值的大小或是否相等。它們的運算結果永遠是布林值 (bool),也就是 TrueFalse

運算符號 名稱 範例 結果
== 等於 5 == 5 True
!= 不等於 5 != 6 True
> 大於 10 > 5 True
< 小於 10 < 5 False
>= 大於等於 5 >= 5 True
<= 小於等於 5 <= 4 False
注意: '=' 是「指派」,用來把值指派給變數;'==' 才是「比較」,用來判斷兩邊是否相等。這是初學者最常犯的錯誤之一!

第 4 章:邏輯運算符號(Logical Operators)

邏輯運算符號的左值與右值都是布林值,一般用於結合多個布林運算式,常見於 if 判斷式中。

  • and: 左右兩邊的條件都必須為 True,結果才是 True
  • or: 左右兩邊的條件只要有一個為 True,結果就是 True
  • not: 將布林值反轉 (not True 變成 False)。
age = 25
has_ticket = True

# 範例 1: and
# 檢查年齡是否介於 18 到 65 之間
is_adult = age >= 18 and age < 65
print("是成年人嗎?", is_adult)

# 範例 2: or
# 只要是 VIP 或持有學生證其一,即可享有折扣
is_vip = False
is_student = True
has_discount = is_vip or is_student
print("有折扣嗎?", has_discount)

# 範例 3: not
can_enter = not age < 18 # 等同於 age >= 18
print("可以入場嗎?", can_enter)

第 5 章:指派運算符號 (Assignment Operators)

指派運算符號用於將值賦予變數。除了最基本的 =,還有一系列的「複合指派運算符號」,它們是將算術運算與指派合併的語法糖,能讓程式碼更精簡。

運算符號 等價於 範例
x += 5 x = x + 5 將 x 的值加 5
x -= 5 x = x - 5 將 x 的值減 5
x *= 5 x = x * 5 將 x 的值乘以 5
x /= 5 x = x / 5 將 x 的值除以 5
score = 100
print("原始分數:", score)

# 加上獎勵分數 10 分
score += 10 # 等同於 score = score + 10
print("加分後:", score)

# 因為犯規,分數扣半
score /= 2 # 等同於 score = score / 2
print("扣半後:", score)

第六章:位元運算符號

電腦中的所有運算最終都是由一連串的 01 組成的。這些01 就是**位元 (Bit)**。

位元運算就是直接操作這些 01 的運算。

10 進位 VS 2 進位

在 Python 中,使用 bin() 函數可以查看一個數字的二進位形式 (0b 開頭代表二進位):

十進位二進位 (電腦的 0/1)
50b101
30b11

十進位轉二進位 (Decimal to Binary)

方法:連續除以 2 (Repeated Division by 2)

步驟:

  1. 用十進位數除以 2。
  2. 記錄下**餘數** (Remainder),只會是 0 或 1。
  3. 將得到的**商數** (Quotient) 作為下一次除法的被除數。
  4. 重複以上步驟,直到商數變成 0 為止。
  5. 將所有餘數**由下往上**(從最後一個到第一個)排列起來,即為二進位結果。

範例:將十進位 25 轉換為二進位

運算商數 (Quotient)餘數 (Remainder)
25 \ 2121 (最低位)
12 \ 260
6 \ 230
3 \ 211
1 \ 201 (最高位)

依序由下往上排列餘數:**11001**

結果:25_{10} = 11001_2


二進位轉十進位 (Binary to Decimal)

方法:位值加權求和法 (Weighted Sum)

步驟:

  1. 確認二進位數每個位元對應的 2 的冪次(權重):最右邊是 2^0,往左依序是 2^1, 2^2.....。
  2. 將每個位元 (0 或 1) 乘以其對應的權重。
  3. 將所有的乘積相加,即得到十進位結果。

範例:將二進位 11001 轉換為十進位

二進位位元 (Bit)權重 (Power of 2)乘積 (Bit \times Weight)
12^4 = 161 * 16 = 16
12^3 = 81 * 8 = 8
02^2 = 40 * 4 = 0
02^1 = 20 * 2 = 0
12^0 = 11 * 1 = 1

將乘積加總:16 + 8 + 0 + 0 + 1 = 25

結果:11001_2 = 25_{10}

運算符號

符號中文名稱英文名稱運算
&位元且AND只有兩個都是 1 才等於 1
|位元或OR只要有一個是 1 等於 1
^位元互斥或XOR兩個不一樣才等於 1
~位元反轉NOT把 1 變 0,0 變 1
<<左移Left Shift向左移,右側補 0
>>右移Right Shift向右移,左側補 0或1

範例 (A=5, B=3)

範例數字: A=5 (0101) 和 B=3 (0011)

1. 位元 and (&):

對應的兩個位元都是 1,結果的位元才是 1

A = 5   # 0101
B = 3   # 0011
result = A & B
#   0101
# & 0011
# ------
#   0001  <-- 結果是 1
print(result) # 輸出: 1

2. 位元 or (|):

對應的兩個位元中至少有一個1,結果的位元就是 1

A = 5   # 0101
B = 3   # 0011
result = A | B
#   0101
# | 0011
# ------
#   0111  <-- 結果是 7
print(result) # 輸出: 7

3. 位元互斥 (^):

對應的兩個位元不相同(一個 0 一個 1),結果的位元才是 1

A = 5   # 0101
B = 3   # 0011
result = A ^ B
#   0101
# ^ 0011
# ------
#   0110  <-- 結果是 6
print(result) # 輸出: 6

4. 位元反轉 (~):

將數字的每個位元反轉。在 Python 中,快速計算的公式是:X = -(X + 1)。

A = 5
result = ~A
# ~5 等於 -(5 + 1)
print(result) # 輸出: -6

5. 左移 (<<):

向左推動 n 位,右邊補 0

A = 5   # 0101
result = A << 2 # 左移 2 位 
# 0101 << 2 變成 010100
# 010100 <-- 結果是 20
print(result) # 輸出: 20

6. 右移 (>>):

向右推動 n 位,右邊的位元被丟棄。

A = 20  # 010100
result = A >> 2 # 右移 2 位 (整數除以 2^2=4)
# 010100 >> 2 變成 0101
# 0101 <-- 結果是 5
print(result) # 輸出: 5

留言

這個網誌中的熱門文章

目錄

Python IDLE 安裝與使用

Python 核心資料型態:數字、文字與邏輯