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