Python 提供了豐富的位元運算元,方便開發者直接操作整數的二進位表示形式。理解這些運算元,例如 AND(&)、OR(|)、XOR(^)、左移(«) 和右移(»),對於撰寫高效能程式碼至關重要。在實際應用中,位元運算常被用於網路程式設計、嵌入式系統以及密碼學等領域。熟練掌握這些技巧,能讓開發者更有效率地處理資料,並提升程式的執行效率。此外,Python 的複合指定運算元,例如 +=、-=、*= 等,能簡化程式碼,並提高程式碼的可讀性。善用這些運算元,可以讓程式碼更精簡易懂,同時也更容易維護。

位元運算元

Python 提供了六種位元運算元,用於位元操作。這些運算元允許程式設計師存取和操作資料中的個別位元。表 3.12 列出了 Python 支援的各種位元運算元。

位元運算元列表

運算元意義
&位元 AND
|位元 OR
^位元 XOR
»右移
«左移
~位元 NOT

位元 AND (&) 運算元

此運算元對輸入數字的位元執行 AND 運算。位元 AND 運算元表示為 && 運算元對兩個運算元進行逐位元操作。表 3.13 說明瞭 AND 運算元。

AND 運算元真值表

輸入 X輸入 Y輸出 X & Y
000
010
100
111

從表中可以看出,輸出是透過將輸入位元相乘得到的。

AND 運算元範例

>>> 1 & 3
1 
>>> 5 & 4
4 

以下是 1 & 3 的運作方式: 1 和 3 被轉換為等效的二進位制格式:

0 0 0 1 (1)
&
0 0 1 1 (3)
---
-
---
-
---
-
---
-
---
位元運算 (0 & 0) (0 & 0) (0 & 1) (1 & 1)
---
-
---
-
---
-
---
-
---
結果 0 0 0 1 (1)
十進位制等效值 = 1

因此,1 & 3 = 1

程式範例:使用位元 AND 運算元

num1 = int(input('輸入第一個數字:'))
num2 = int(input('輸入第二個數字:'))
print(num1, '&', num2, '=', num1 & num2)

輸出:

#測試案例 1
輸入第一個數字:1
輸入第二個數字:3
1 & 3 = 1
#測試案例 2
輸入第一個數字:5
輸入第二個數字:6
5 & 6 = 4

位元 OR (|) 運算元

此運算元對數字執行位元 OR 運算。位元 OR 運算元表示為 |。它也對兩個運算元進行逐位元比較。表 3.14 說明瞭 | (OR) 運算元。

OR 運算元真值表

| 輸入 X | 輸入 Y | 輸出 X | Y | | — | — | — | | 0 | 0 | 0 | | 0 | 1 | 1 | | 1 | 0 | 1 | | 1 | 1 | 1 |

從表中可以看出,輸出是透過將輸入位元相加得到的。

OR 運算元範例

>>> 3 | 5
7 
>>> 1 | 5
5 

以下是 3 | 5 的運作方式: 3 和 5 被轉換為等效的二進位制格式:

0 0 1 1 (3)
|
0 1 0 1 (5)
---
-
---
-
---
-
---
-
---
位元運算 (0 | 0) (0 | 1) (1 | 0) (1 | 1)
---
-
---
-
---
-
---
-
---
結果 0 1 1 1 (7)
十進位制等效值 = 7

因此,3 | 5 = 7

程式範例:使用位元 OR 運算元

num1 = int(input('輸入第一個數字:'))
num2 = int(input('輸入第二個數字:'))
print(num1, '|', num2, '=', num1 | num2)

輸出:

#測試案例 1
輸入第一個數字:3
輸入第二個數字:5
3 | 5 = 7
#測試案例 2
輸入第一個數字:6
輸入第二個數字:1
6 | 1 = 

位元 XOR (^) 算符號的介紹與應用

簡介
在電腦科學中,**XOR(Exclusive OR)**是一種邏輯運算子,用於對兩個二進位制數進行逐位元的比較。其結果依據以下規則產生:

  • 當兩個輸入位元不同時,輸出為 1
  • 當兩個輸入位元相同時,輸出為 0

Python 使用 ^ 符號來表示 XOR 操作,它主要用於以下幾個方面:

  • 資料加密與解密。
  • 簡單校驗和錯誤檢測。
  • 位元遮罩與切換操作。

XOR 真值表

| 輸入 A | 輸入 B | 輸出 A ^ B | |


-|


-|



-| | 0 | 0 | 0 | | 0 | 1 | 1 | | 1 | 0 | 1 | | 1 | 1 | 0 |


XOR 範例與解析

範例

print(3 ^ 5) # 輸出:6  
print(5 ^ 3) # 輸出:6  
print(10 ^ 10) # 輸出:0  

解析

3 ^ 為例:

  • 35 分別轉換為二進位制:
    • 3 = 0011
    • 5 = 010
  • 對應位元進行 XOR 操作:
    `001`
    ^
    `010`
    


 `01`
- 結果為 **`011`**,其十進製表示為 **`6`**。

---

### XOR 的特性

#### **交換律**
XOR 操作滿足交換律,即:
- **`A ^ B = B ^ A`**

#### **結合律**
XOR 操作滿足結合律,即:
- **`A ^ (B ^ C) = (A ^ B) ^ C`**

#### **恆等律**
任何數與 **`0`** 做 XOR 結果不變,即:
- **`A ^``**

#### **自反性**
任何數與自身做兩次 XOR 結果不變,即:
- **`A ^ A =`**  

---

### 程式範例:使用 XOR

```python  
def main():
a = int(input("請輸入第一個數字: "))
b = int(input("請輸入第二個數字: "))
result = a ^ b # 使用 XOR 對 a 和 b 操作 
print(f"{a} ^ {b} 的結果是: {result}")

if __name__ == "__main__":
main()

程式輸出範例

請輸入第一個數字:  
請輸入第二個數字:  
7 ^ 的結果是: 

Python中的位元運算元與複合指定運算元

Python提供了多種運算元來進行不同的運算操作,包括位元運算元和複合指定運算元。這些運算元在處理數值、邏輯運算以及簡化程式碼方面非常有用。

位元運算元

位元運算元直接對整數的二進位製表示進行操作。Python支援多種位元運算元,包括按位與(&)、按位或(|)、按位異或(^)、左移(«)和右移(»)。

按位異或(^)運算元

按位異或運算元(^)對兩個整數的二進位製表示進行異或操作。如果兩個對應的位元不同,則結果為1;否則,結果為0。

# 計算兩個數的按位異或
num1 = int(input('輸入第一個數字: '))
num2 = int(input('輸入第二個數字: '))
result = num1 ^ num2
print(f'{num1} ^ {num2} = {result}')

內容解密:

  1. num1 = int(input('輸入第一個數字: ')):讀取使用者輸入的第一個數字,並將其轉換為整數。
  2. num2 = int(input('輸入第二個數字: ')):讀取使用者輸入的第二個數字,並將其轉換為整數。
  3. result = num1 ^ num2:對num1num2進行按位異或運算,將結果儲存在result中。
  4. print(f'{num1} ^ {num2} = {result}'):輸出按位異或運算的結果。

右移(»)運算元

右移運算元(»)將一個整數的二進位製表示向右移動指定的位數。這相當於將該整數除以2的指定次方。

# 將輸入的數字向右移動指定的位數
num = int(input('輸入數字: '))
shift_bits = int(input('輸入向右移動的位數: '))
result = num >> shift_bits
print(f'{num} >> {shift_bits} = {result}')

內容解密:

  1. num = int(input('輸入數字: ')):讀取使用者輸入的數字,並將其轉換為整數。
  2. shift_bits = int(input('輸入向右移動的位數: ')):讀取使用者輸入的向右移動的位數,並將其轉換為整數。
  3. result = num >> shift_bits:將num的二進位製表示向右移動shift_bits位,將結果儲存在result中。
  4. print(f'{num} >> {shift_bits} = {result}'):輸出右移運算的結果。

左移(«)運算元

左移運算元(«)將一個整數的二進位製表示向左移動指定的位數。這相當於將該整數乘以2的指定次方。

# 將輸入的數字向左移動指定的位數
num = int(input('輸入數字: '))
shift_bits = int(input('輸入向左移動的位數: '))
result = num << shift_bits
print(f'{num} << {shift_bits} = {result}')

內容解密:

  1. num = int(input('輸入數字: ')):讀取使用者輸入的數字,並將其轉換為整數。
  2. shift_bits = int(input('輸入向左移動的位數: ')):讀取使用者輸入的向左移動的位數,並將其轉換為整數。
  3. result = num << shift_bits:將num的二進位製表示向左移動shift_bits位,將結果儲存在result中。
  4. print(f'{num} << {shift_bits} = {result}'):輸出左移運算的結果。

複合指定運算元

複合指定運算元結合了指定運算元和其他運算元(如加法、減法、乘法等),使得程式碼更加簡潔。

計算圓面積的範例

# 使用複合指定運算元計算圓面積
radius = float(input('輸入圓的半徑: '))
area = 3.14
radius **= 2  # radius = radius ** 2
area *= radius  # area = area * radius
print(f'圓面積為: {area}')

內容解密:

  1. radius = float(input('輸入圓的半徑: ')):讀取使用者輸入的圓半徑,並將其轉換為浮點數。
  2. area = 3.14:初始化圓周率。
  3. radius **= 2:計算半徑的平方,使用複合指定運算元**=
  4. area *= radius:計算圓面積,使用複合指定運算元*=
  5. print(f'圓面積為: {area}'):輸出計算出的圓面積。

商品及服務稅(GST)計算器

GST是一種在商品和服務生產、銷售和消費各階段徵收的綜合稅。以下是一個簡單的GST計算器範例。

# GST計算器
cost_of_product = float(input('輸入商品成本: '))
cgst_rate = float(input('輸入中央GST稅率(%): '))
sgst_rate = float(input('輸入州GST稅率(%): '))

amount_cgst = (cgst_rate / 100) * cost_of_product
amount_sgst = (sgst_rate / 100) * cost_of_product
total_cost = cost_of_product + amount_cgst + amount_sgst

print(f'商品總成本: Rs {total_cost}')

內容解密:

  1. cost_of_product = float(input('輸入商品成本: ')):讀取使用者輸入的商品成本,並將其轉換為浮點數。
  2. cgst_rate = float(input('輸入中央GST稅率(%): '))sgst_rate = float(input('輸入州GST稅率(%): ')):讀取中央和州GST稅率。
  3. amount_cgstamount_sgst:分別計算中央和州GST金額。
  4. total_cost:計算商品總成本,包括GST。
  5. print(f'商品總成本: Rs {total_cost}'):輸出商品總成本。

Python 中的運算元與表示式

Python 支援多種運算元,包括算術運算元、布林運算元、關係運算元、位元運算元和複合指定運算元。這些運算元在 Python 程式設計中扮演著至關重要的角色,讓我們能夠進行各種數學運算、邏輯判斷和資料處理。

算術運算元

Python 中的算術運算元包括加法、減法、乘法、除法、模數和指數等。

一元運算元與二元運算元

一元運算元只對一個運算元進行操作,而二元運算元則需要兩個運算元。

# 一元運算元範例
x = 5
y = -x  # y = -5
print(y)

# 二元運算元範例
a = 10
b = 3
c = a + b  # c = 13
print(c)

除法運算元

Python 中的除法運算元 / 會傳回一個浮點數結果。

# 除法運算元範例
x = 10
y = 3
z = x / y  # z = 3.3333333333333335
print(z)

模數運算元

模數運算元 % 傳回兩個數字相除後的餘數。

# 模數運算元範例
a = 17
b = 5
c = a % b  # c = 2
print(c)

指數運算元

指數運算元 ** 用於計算一個數字的冪。

# 指數運算元範例
x = 2
y = 3
z = x ** y  # z = 8
print(z)

運算元的優先順序與結合性

Python 中的運算元具有不同的優先順序,這決定了表示式中運算元的執行順序。當多個運算元的優先順序相同時,則根據結合性(從左到右或從右到左)來決定執行的順序。

# 運算元的優先順序範例
result = 3 + 4 * 2  # result = 11,因為乘法的優先順序高於加法
print(result)

複合指定運算元

複合指定運算是將某個運算元和指定運算元結合使用,以簡化程式碼。

# 複合指定運算元範例
x = 5
x += 3  # 等同於 x = x + 3,結果 x = 8
print(x)

位元運算元

位元運算元對整數的二進位表示進行操作。

# 位元左移範例
x = 5  # 二進位:101
y = x << 2  # 二進位:10100,結果 y = 20
print(y)

# 位元右移範例
x = 20  # 二進位:10100
y = x >> 2  # 二進位:101,結果 y = 5
print(y)
練習題與程式設計作業
  1. 編寫程式讀取使用者輸入的五個科目的成績,計算總分和百分比。
  2. 編寫程式讀取一個四位數字,並計算其各位數字之和。
  3. 編寫程式將公里轉換為米、釐米和英里。
  4. 編寫程式將公斤轉換為磅和噸。
  5. 編寫程式計算球體的體積。

透過練習,可以加深對 Python 中各種運算元和表示式的理解,並提高程式設計能力。