Python 二進位制數和邏輯運算子

我們之前看過簡單的數字和操作。在本文中,你將瞭解數字在計算機內部的工作方式以及與之相配的一些魔力。

在本文中,你將學習如何在 Python 中使用二進位制數,如何將它們轉換為小數以及如何對它們進行按位運算。

二進位制數

在計算機訊號處理最底層,除了“有訊號”或“這些不是訊號”之外,計算機沒有任何數字概念。你可以將其視為一個燈開關:開關開啟或關閉。

這些微小的資訊,即你可以儲存在計算機中的最小資訊量,被稱為一個位元 bit。我們將其表示為低-0 或高-1

為了表示高於 1 的數字的想法誕生於使用位元序列。8 位序列可以儲存更大的數字,這稱為位元組 - byte 。由 10 組成的序列稱為二進位制。我們傳統的十位數計數系統稱為十進位制。

![帶二進位制表示的十進位制數](/img/Tutorial/Python/binary number.webp)

讓我們看看實際中的程式:

print int('01', 2)
print int('10', 2)
print int('11', 2)

第二個引數 2 告訴 Python 我們有一個基於二進位制(1 和 0)的數字。要將位元組(8 位)轉換為十進位制,只需在第一個引數中寫入 8 位的組合。

print int('00000011', 2)   # outputs 3
print int('00010001', 2)   # outputs 17
print int('11111111', 2)   # outputs 255

電腦是如何做到這一點的?每個數字(從右到左)乘以 2 的冪。

數字'000 1 000 1 ‘是(1 x 2 ^ 0)+(0 x 2 ^ 1)+(0 x 2 ^ 2)+(0 x 2 ^ 3)+(1 x 2 ^ 4)+(0 x 2 ^ 5)+(0 x 2 ^ 6)+(0 x 2 ^ 7)= 16 + 1 = 17。記住,從右到左閱讀。

數字'00110010’將是(0 x 2 ^ 0)+(1 x 2 ^ 1)+(0 x 2 ^ 2)+(0 x 2 ^ 3)+(1 x 2 ^ 4)+(1 x 2 ^ 5)+(0×2 ^ 6)+(0×2 ^ 7)= 32 + 16 + 2 = 50。

自己嘗試序列'00101010’,看看你是否理解並驗證了 Python 程式。

二進位制數的邏輯運算

二進位制左移和二進位制右移

乘以因子 2 併除以因子 2 在二進位制中非常容易。我們只需向左或向右移動位。我們向下移動:

第 4 位 第 3 位 第 2 位 第 1 位
0 1 0 1
1 0 1 0

在移位 0101 之前,我們得到數字 5。在移位 1010 後,我們得到數字 10。在 python 中,你可以使用按位左移運算子 << 來左移,按位右移運算子 >> 來向右移位。

inputA = int('0101',2)
 
print "Before shifting " + str(inputA) + " " + bin(inputA)
print "After shifting in binary: " + bin(inputA << 1)
print "After shifting in decimal: " + str(inputA << 1)

輸出:

Before shifting 5 0b101
After shifting in binary: 0b1010
After shifting in decimal: 10

Python 邏輯與運算子

給定兩個輸入,計算機可以使用這些位執行多個邏輯運算。我們來看看邏輯與 AND 運算子。如果輸入 A 和輸入 B 為正,則輸出為正。我們將以圖形方式演示 AND 運算子,左邊的兩個是輸入 A 和輸入 B,右邊的圓是輸出:

![按位與](/img/Tutorial/Python/bitwise AND.webp)

在程式碼中,使用 符號,它表示邏輯與運算子。

inputB = 1
print inputA & inputB   # Bitwise AND

通過更改輸入,你將獲得與上圖相同的結果。我們可以對序列執行 AND 運算子:

inputA = int('00100011',2)   # define binary sequence inputA
inputB = int('00101101',2)   # define binary sequence inputB
 
print bin(inputA & inputB)   # logical AND on inputA and inputB and output in binary

輸出:

0b100001   # equals 00100001

這是有道理的,因為如果你手動執行操作:

00100011
00101101
--------   Logical bitwise AND
00100001

Python 邏輯或運算子

既然你已經學習了邏輯與運算子,那麼讓我們看一下邏輯或 OR 運算子。給定兩個輸入,僅當 AB 都為零時,輸出才為零。

![按位或](/img/Tutorial/Python/bitwise OR.webp)

要執行它,我們使用 | 運算子。舉例如下,

inputA = int('00100011',2)  # define binary number
inputB = int('00101101',2)  # define binary number
 
print bin(inputA)            # prints inputA in binary
print bin(inputB)            # prints inputB in binary
print bin(inputA | inputB)   # Execute bitwise logical OR and print result in binary

輸出:

0b100011
0b101101
0b101111

XOR 運算子

這是一個有趣的運算子:異或或短期異或。

![按位異或](/img/Tutorial/Python/bitwise XOR.webp)

要執行它,我們使用 ^ 運算子。舉例如下,

inputA = int('00100011',2)  # define binary number
inputB = int('00101101',2)  # define binary number
 
print bin(inputA)            # prints inputA in binary
print bin(inputB)            # prints inputB in binary
print bin(inputA ^ inputB)   # Execute bitwise logical OR and print result in binary

輸出:

0b100011
0b101101
0b1110