Published on

[Python 學習筆記] 3-位元運算

Authors
  • avatar
    Name
    Vic Chen
    Twitter

Python 位元運算

位元運算(Bitwise Operation)是直接針對二進位位元進行的操作,常用於:

  • 高效數值運算
  • 狀態旗標(flag)的設定/檢查

位元運算符(Bitwise Operators)

運算符名稱說明範例結果
&AND對應位都為 1 → 15 & 31
|OR對應位至少一個 1 → 15 | 37
^XOR對應位不同 → 15 ^ 36
~NOT取反 (二補數)~5-6
<<左移所有位向左移 n 位5 << 110
>>右移所有位向右移 n 位5 >> 12

位元運算示意

53 的 8-bit 二進位為例:

5  = 00000101
3  = 00000011

AND(&):

  00000101
& 00000011
= 00000001   -> 1

OR(|):

  00000101
| 00000011
= 00000111   -> 7

XOR(^):

  00000101
^ 00000011
= 00000110 -> 6

NOT(~):

 ~00000101
= 11111010 -> -6 (Python 用補數表示)

左移(<<):

5 << 1
00000101 -> 00001010 -> 10

右移(>>):

5 >> 1
00000101 -> 00000010 -> 2

小技巧

  1. 用位元檢查特定位
x = 0b1010  # 10
print(bool(x & 0b0010))  # True,檢查第二位是否為 1
  1. 快速乘除以 2
x = 5
print(x << 1)  # 10,相當於乘以 2
print(x >> 1)  # 2,相當於整除 2
  1. 快速交換變數(XOR Swap)
a, b = 3, 5
a ^= b
b ^= a
a ^= b
print(a, b)  # 5 3

TIP

位元運算常出現在演算法或硬體開發中,但一般高階應用不一定會頻繁用到。