Python 速查手冊

3.2 位元運算

位元運算是指整數用二進位的方式進行計算,例如向左位移是把二進位數字往左移動給定的位元數,這樣的效果,如果移動一個位元,就等同整個數字乘上 2 ,向右位移則是除以 2 ,其他的邏輯運算同樣是位元對位元的計算。

位元運算子有連續兩個小於符號的向左位移,連續兩個大於符號的向右位移,以及其他四個可以在鍵盤上找到的邏輯運算子

符號作用
<<向左位移
>>向右位移
&位元且
|位元或
^位元互斥或
~位元非

整數 8 的二進位形式為 1000 ,向左位移兩個位元,等於乘上 4 ,結果會是 32

a = 8
print(a)
print(bin(a))
b = a << 2
print(b)
print(bin(b))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:bitwise01.py
# 功能:示範位元運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 bitwise01.py
8
0b1000
32
0b100000
$

同樣用整數 8 向右位移兩個位元,等於除以 4 ,結果會是 2

a = 8
print(a)
print(bin(a))
b = a >> 2
print(b)
print(bin(b))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:bitwise02.py
# 功能:示範位元運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 bitwise02.py
8
0b1000
2
0b10
$

整數 10 的二進位形式為 1010 ,跟整數 81000 進行「且」運算,由於只有最左邊的位元都是 1 ,因此結果會是 1000 ,也就是十進位的 8

a = 10
print(a)
print(bin(a))
b = 8
print(b)
print(bin(b))
r = a & b
print(r)
print(bin(r))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:bitwise03.py
# 功能:示範位元運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 bitwise03.py
10
0b1010
8
0b1000
8
0b1000
$

整數 10 跟整數 8 進行「或」運算,由於有兩個位元是 1 ,因此結果會是 1010 ,也就是十進位的 10

a = 10
print(a)
print(bin(a))
b = 8
print(b)
print(bin(b))
r = a | b
print(r)
print(bin(r))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:bitwise04.py
# 功能:示範位元運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 bitwise04.py
10
0b1010
8
0b1000
10
0b1010
$

整數 10 跟整數 8 進行「互斥或」運算,由於只有一個位元是 10 ,因此結果會是 10 ,也就是十進位的 2

a = 10
print(a)
print(bin(a))
b = 8
print(b)
print(bin(b))
r = a ^ b
print(r)
print(bin(r))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:bitwise05.py
# 功能:示範位元運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 bitwise05.py
10
0b1010
8
0b1000
2
0b10
$

最後用整數 8 進行「非」運算,這邊會得到二進位負數,結果為十進位的 -9

a = 8
print(a)
print(bin(a))
b = ~a
print(b)
print(bin(b))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:bitwise06.py
# 功能:示範位元運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 bitwise06.py
8
0b1000
-9
-0b1001
$

相關教學影片

上一頁: 3.1 算術運算
Python 速查手冊 - 目錄
下一頁: 3.3 比較運算
回 Python 教材首頁
回程式語言教材首頁