Python - �位元運算子

你好啊,未來的Python巫師們!今天,我們將踏上一段令人興奮的旅程,進入位元運算子的世界。我知道你們可能會想:"位元運算子?這不就像是只有電腦科學家才會關心的東西嗎!"但相信我,理解這些運算子可以非常實用,甚至非常有趣!那麼,讓我們一起深入探究位元和位元組的神秘吧。

Python - Bitwise Operators

Python位元運算子

位元運算子是特殊運算子,它們對數字的二進制表示形式進行操作。它們操作個位元,位元是計算中數據的最小單位。將位元想像成微小的開關,可以打開(1)或關閉(0)。

在我們深入探究每個運算子之前,先快速看看Python中所有的位元運算子:

運算子 名稱 描述
& AND 如果兩個位元都是1,則將每個位元設置為1
| OR 如果兩個位元中的一個是1,則將每個位元設置為1
^ XOR 如果只有一個位元是1,則將每個位元設置為1
~ NOT 反轉所有位元
<< 左移 通過從右側推入0來左移
>> 右移 通過從左側推入最左邊位元的副本來右移

現在,讓我們詳細探究每一個運算子。

Python位元AND運算子 (&)

位元AND運算子(&)將第一個操作數的每個位元與第二個操作數的對應位元進行比較。如果兩個位元都是1,則對應的結果位元設置為1。否則,對應的結果位元設置為0。

讓我們看一個例子:

a = 5  # 二進制:0101
b = 3  # 二進制:0011
result = a & b
print(f"{a} & {b} = {result}")  # 輸出:5 & 3 = 1

在這個例子中,我們在5(二進制0101)和3(二進制0011)之間執行位元AND操作。結果是1(二進制0001)。

以下是操作過程:

0101 (5)
& 0011 (3)
----
0001 (1)

如你所見,只有最右邊的位元在兩個數字中都是1,所以只有那個位元在結果中是1。

Python位元OR運算子 (|)

位元OR運算子(|)將第一個操作數的每個位元與第二個操作數的對應位元進行比較。如果其中一位元是1,則對應的結果位元設置為1。否則,對應的結果位元設置為0。

這裡有一個例子:

a = 5  # 二進制:0101
b = 3  # 二進制:0011
result = a | b
print(f"{a} | {b} = {result}")  # 輸出:5 | 3 = 7

在這種情況下,我們在5和3之間執行位元OR操作。結果是7(二進制0111)。

以下是分解:

0101 (5)
| 0011 (3)
----
0111 (7)

結果在原始數字中的任何一個有1的地方都是1。

Python位元XOR運算子 (^)

位元XOR(異或)運算子(^)將第一個操作數的每個位元與第二個操作數的對應位元進行比較。如果位元不同,則對應的結果位元設置為1。如果位元相同,則對應的結果位元設置為0。

讓我們看一個例子:

a = 5  # 二進制:0101
b = 3  # 二進制:0011
result = a ^ b
print(f"{a} ^ {b} = {result}")  # 輸出:5 ^ 3 = 6

在這裡,我們在5和3之間執行位元XOR操作。結果是6(二進制0110)。

以下是操作過程:

0101 (5)
^ 0011 (3)
----
0110 (6)

結果在原始數字中的位元不同之處有1。

Python位元NOT運算子 (~)

位元NOT運算子(~)是一元運算子(它只接受一個操作數),它會翻轉其操作數的位元。每個0變成1,每個1變成0。

這裡有一個例子:

a = 5  # 二進制:0101
result = ~a
print(f"~{a} = {result}")  # 輸出:~5 = -6

你可能會想知道為什麼結果是-6。這是因為Python使用二進補碼來表示負數。在二進補碼中,最左邊的位元表示符號(0為正,1為負)。

以下是底下的操作:

00000101 (5)
~
11111010 (-6的二進補碼)

Python位元左移運算子 (<<)

位元左移運算子(<<)將第一個操作數的位元向左移動第二個操作數指定的位置數。右邊的新位元用0填充。

讓我們看一個例子:

a = 5  # 二進制:0101
b = 1
result = a << b
print(f"{a} << {b} = {result}")  # 輸出:5 << 1 = 10

在這種情況下,我們將5的位元向左移動1個位置。結果是10(二進制1010)。

以下是操作過程:

0101 (5)
向左移動1
1010 (10)

每個左移有效地將數字乘以2。

Python位元右移運算子 (>>)

位元右移運算子(>>)將第一個操作數的位元向右移動第二個操作數指定的位置數。對於正數,左邊的新位元用0填充。

這裡有一個例子:

a = 5  # 二進制:0101
b = 1
result = a >> b
print(f"{a} >> {b} = {result}")  # 輸出:5 >> 1 = 2

在這裡,我們將5的位元向右移動1個位置。結果是2(二進制0010)。

以下是分解:

0101 (5)
向右移動1
0010 (2)

每個右移有效地將數字除以2(向下取整到最接近的整數)。

就是這樣,各位!我們已經走過了Python中位元運算子的土地。這些運算子一開始可能會有點抽象,但它们是非常強大的工具,特別是當你在處理低階操作或需要優化代碼性能時。

記住,練習成就完美。嘗試玩弄這些運算子,嘗試不同的數字,看看你會得到什麼結果。在你意識到之前,你將能像專家一樣操作位元!

編程愉快,願位元永遠在你們那邊!

Credits: Image by storyset