Python 提供了豐富的位元運算元,方便開發者直接操作整數的二進位表示形式。理解這些運算元,例如 AND(&)、OR(|)、XOR(^)、左移(«) 和右移(»),對於撰寫高效能程式碼至關重要。在實際應用中,位元運算常被用於網路程式設計、嵌入式系統以及密碼學等領域。熟練掌握這些技巧,能讓開發者更有效率地處理資料,並提升程式的執行效率。此外,Python 的複合指定運算元,例如 +=、-=、*= 等,能簡化程式碼,並提高程式碼的可讀性。善用這些運算元,可以讓程式碼更精簡易懂,同時也更容易維護。
位元運算元
Python 提供了六種位元運算元,用於位元操作。這些運算元允許程式設計師存取和操作資料中的個別位元。表 3.12 列出了 Python 支援的各種位元運算元。
位元運算元列表
| 運算元 | 意義 |
|---|---|
| & | 位元 AND |
| | | 位元 OR |
| ^ | 位元 XOR |
| » | 右移 |
| « | 左移 |
| ~ | 位元 NOT |
位元 AND (&) 運算元
此運算元對輸入數字的位元執行 AND 運算。位元 AND 運算元表示為 &。& 運算元對兩個運算元進行逐位元操作。表 3.13 說明瞭 AND 運算元。
AND 運算元真值表
| 輸入 X | 輸入 Y | 輸出 X & Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
從表中可以看出,輸出是透過將輸入位元相乘得到的。
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 ^ 為例:
- 將 3 與 5 分別轉換為二進位制:
3=00115=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}')
內容解密:
num1 = int(input('輸入第一個數字: ')):讀取使用者輸入的第一個數字,並將其轉換為整數。num2 = int(input('輸入第二個數字: ')):讀取使用者輸入的第二個數字,並將其轉換為整數。result = num1 ^ num2:對num1和num2進行按位異或運算,將結果儲存在result中。print(f'{num1} ^ {num2} = {result}'):輸出按位異或運算的結果。
右移(»)運算元
右移運算元(»)將一個整數的二進位製表示向右移動指定的位數。這相當於將該整數除以2的指定次方。
# 將輸入的數字向右移動指定的位數
num = int(input('輸入數字: '))
shift_bits = int(input('輸入向右移動的位數: '))
result = num >> shift_bits
print(f'{num} >> {shift_bits} = {result}')
內容解密:
num = int(input('輸入數字: ')):讀取使用者輸入的數字,並將其轉換為整數。shift_bits = int(input('輸入向右移動的位數: ')):讀取使用者輸入的向右移動的位數,並將其轉換為整數。result = num >> shift_bits:將num的二進位製表示向右移動shift_bits位,將結果儲存在result中。print(f'{num} >> {shift_bits} = {result}'):輸出右移運算的結果。
左移(«)運算元
左移運算元(«)將一個整數的二進位製表示向左移動指定的位數。這相當於將該整數乘以2的指定次方。
# 將輸入的數字向左移動指定的位數
num = int(input('輸入數字: '))
shift_bits = int(input('輸入向左移動的位數: '))
result = num << shift_bits
print(f'{num} << {shift_bits} = {result}')
內容解密:
num = int(input('輸入數字: ')):讀取使用者輸入的數字,並將其轉換為整數。shift_bits = int(input('輸入向左移動的位數: ')):讀取使用者輸入的向左移動的位數,並將其轉換為整數。result = num << shift_bits:將num的二進位製表示向左移動shift_bits位,將結果儲存在result中。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}')
內容解密:
radius = float(input('輸入圓的半徑: ')):讀取使用者輸入的圓半徑,並將其轉換為浮點數。area = 3.14:初始化圓周率。radius **= 2:計算半徑的平方,使用複合指定運算元**=。area *= radius:計算圓面積,使用複合指定運算元*=。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}')
內容解密:
cost_of_product = float(input('輸入商品成本: ')):讀取使用者輸入的商品成本,並將其轉換為浮點數。cgst_rate = float(input('輸入中央GST稅率(%): '))和sgst_rate = float(input('輸入州GST稅率(%): ')):讀取中央和州GST稅率。amount_cgst和amount_sgst:分別計算中央和州GST金額。total_cost:計算商品總成本,包括GST。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)
練習題與程式設計作業
- 編寫程式讀取使用者輸入的五個科目的成績,計算總分和百分比。
- 編寫程式讀取一個四位數字,並計算其各位數字之和。
- 編寫程式將公里轉換為米、釐米和英里。
- 編寫程式將公斤轉換為磅和噸。
- 編寫程式計算球體的體積。
透過練習,可以加深對 Python 中各種運算元和表示式的理解,並提高程式設計能力。