Python 位運算子



Python 位運算子

Python 位運算子 通常用於對整數型別物件執行位運算。但是,它不是將物件作為一個整體來處理,而是將其視為一個位字串。對字串中的每個位執行不同的操作。

Python 有六個位運算子 - &, |, ^, ~, << 和 >>。所有這些運算子(除了 ~)本質上都是二元的,因為它們作用於兩個運算元。每個運算元都是一個二進位制數字(位)1 或 0。

以下是 Python 中的位運算子:

  • 按位與運算子
  • 按位或運算子
  • 按位異或運算子
  • 按位非運算子
  • 按位左移運算子
  • 按位右移運算子

Python 按位與運算子 (&)

按位與運算子有點類似於邏輯與運算子。只有當兩個位運算元都是 1(即 True)時,它才返回 True。所有組合如下:

0 & 0 is 0
1 & 0 is 0
0 & 1 is 0
1 & 1 is 1

當使用整數作為運算元時,兩者都轉換為等效的二進位制數,& 操作對每個數字的對應位執行,從最低有效位開始,到最高有效位結束。

Python 中按位與運算子的示例

讓我們取兩個整數 60 和 13,並將它們分別賦值給變數 a 和 b。

a=60
b=13
print ("a:",a, "b:",b, "a&b:",a&b)

這將產生以下輸出

a: 60 b: 13 a&b: 12

為了理解 Python 如何執行此操作,請獲取每個變數的二進位制等效值。

print ("a:", bin(a))
print ("b:", bin(b))

這將產生以下輸出

a: 0b111100
b: 0b1101

為了方便起見,對每個數字使用標準的 8 位格式,因此“a”是 00111100,“b”是 00001101。讓我們手動對這兩個數字的每個對應位執行與操作。

0011 1100
&
0000 1101
-------------
0000 1100

將結果二進位制數轉換回整數。您將得到 12,這與之前獲得的結果相同。

>>> int('00001100',2)
12

Python 按位或運算子 (|)

“|”符號(稱為管道)是按位或運算子。如果任何位運算元為 1,則結果為 1,否則為 0。

0 | 0 is 0
0 | 1 is 1
1 | 0 is 1
1 | 1 is 1

Python 中按位或運算子的示例

取相同的值 a=60,b=13。“|”操作的結果為 61。獲取它們的二進位制等效值。

a=60
b=13
print ("a:",a, "b:",b, "a|b:",a|b)
print ("a:", bin(a))
print ("b:", bin(b))

這將產生以下輸出

a: 60 b: 13 a|b: 61
a: 0b111100
b: 0b1101

要手動執行“|”操作,請使用 8 位格式。

0011 1100
    |
0000 1101
-------------
0011 1101

將二進位制數轉換回整數以核對結果:

>>> int('00111101',2)
61

Python 按位異或運算子 (^)

XOR 代表異或。這意味著對兩個位執行或操作的結果為 1,當且僅當其中一個位為 1。

0 ^ 0 is 0
0 ^ 1 is 1
1 ^ 0 is 1
1 ^ 1 is 0

Python 中按位異或運算子的示例

讓我們對 a=60 和 b=13 執行異或操作。

a=60
b=13
print ("a:",a, "b:",b, "a^b:",a^b)

這將產生以下輸出

a: 60 b: 13 a^b: 49

現在我們手動執行按位異或。

0011 1100
    ^
0000 1101
-------------
0011 0001

int() 函式顯示 00110001 為 49。

>>> int('00110001',2)
49

Python 按位非運算子 (~)

此運算子是邏輯非運算子的二進位制等效項。它翻轉每個位,因此 1 被 0 替換,0 被 1 替換,並返回原始數字的補碼。Python 使用 2 的補碼方法。對於正整數,它只需透過反轉位來獲得。對於負數 -x,它使用所有位都被反轉(從 1 變為 0 或從 0 變為 1)的 (x-1) 的位模式來編寫。因此:(對於 8 位表示)

-1 is complement(1 - 1) = complement(0) = "11111111"
-10 is complement(10 - 1) = complement(9) = complement("00001001") = "11110110".

Python 中按位非運算子的示例

對於 a=60,其補碼為:

a=60
print ("a:",a, "~a:", ~a)

這將產生以下輸出

a: 60 ~a: -61

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

左移運算子將最高有效位向右移動“<<”符號右側的數字。因此,“x << 2”導致二進位制表示的 x 向右移動兩位。

Python 中按位左移運算子的示例

讓我們對 60 執行左移。

a=60
print ("a:",a, "a<<2:", a<<2)

這將產生以下輸出

a: 60 a<<2: 240

這是如何發生的?讓我們使用 60 的二進位制等效值,並執行左移 2 位。

0011 1100
<<
    2
-------------
1111 0000

將二進位制數轉換為整數。它是 240。

>>> int('11110000',2)
240

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

右移運算子將最低有效位向左移動右側“>>”符號指定的值。因此,“x >> 2” 會將 x 的二進位制表示中的兩位向左移動。

Python 中的按位右移運算子示例

讓我們對 60 執行右移操作。

a=60
print ("a:",a, "a>>2:", a>>2)

這將產生以下輸出

a: 60 a>>2: 15

下面顯示了對 60 進行手動右移操作:

   0011 1100
   >>
   2
   -------------
   0000 1111

使用 int() 函式將上述二進位制數轉換為整數。結果是 15。

>>> int('00001111',2)
15
廣告