位元運算是指整數用二進位的方式進行計算,例如向左位移是把二進位數字往左移動給定的位元數,這樣的效果,如果移動一個位元,就等同整個數字乘上 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 ,跟整數 8 的 1000 進行「且」運算,由於只有最左邊的位元都是 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 進行「互斥或」運算,由於只有一個位元是 1 跟 0 ,因此結果會是 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 |
$ |
相關教學影片