Python中的位運算符與其它語言中的位運算符作用相同。
位運算符也稱二進制運算符,并且這些運算符只用于對整型數進行運算。
進行位運算時,整型數被轉換為二進制形式,然后位運算符對每位執行有關運算后,將結果再轉換回十進制形式,并返回給用戶。
Python中共有6種位運算符:
(1)&:按位與運算
對應位上的二進制數進行與運算,如果參加位運算的兩個二進制數為1,則結果為1,只要有一個為0,則結果為0,如10和4進行按位與運算,他們對應的二進制形式分別為:1010 和 100,則:
1 0 1 0
& 0 1 0 0
-----------
0 0 0 0
即10和4按位與運算的結果為二進制的0,也對應著10進制的0,最終結果即為0,即 10 & 4 = 0
再如,5和6進行按位與運算,其對應的二進制形式分別為: 101 和 110,
0 1 0 1
& 0 1 1 0
-------------
0 1 0 0
其運算結果為二進制的100,即十進制的4,也就是說: 5 & 6 = 4
在Python中的運行結果如下:
(2)|:按位或運算
按位或運算是二進制對應的每位進行或運算。如果對應的兩位都為0,則結果為0,只要有一個為1,則結果為1。
10 和 4的或運算:
1 0 1 0
| 0 1 0 0
------------
1 1 1 0
其或運算的結果為二進制的 1110,對應著十進制的 14,即 10 | 4 = 14.
5 和 6的或運算:
0 1 0 1
| 0 1 1 0
------------
0 1 1 1
5 和 6的按位或運算結果為 0111,對應的十進制為 7 ,即 5 | 6 = 7.
在Python中的運行結果:
(3)^:按位異或運算
按位異或運算,即對應的兩個二進制位不同時,結果為1,否則為0.
10 和 4 的按位異或運算:
1 0 1 0
^ 0 1 0 0
------------
1 1 1 0
即,結果為二進制1110,對應的十進制為14,亦即: 10 ^ 4 = 14
5 和 6 的按位異或運算:
0 1 0 1
^0 1 1 0
------------
0 0 1 1
0011對應的十進制數為3,也就是說: 5 ^ 6 = 3
在Python中的運行結果:
(4)~:按位取反運算符
該運算是單操作數運算符,即其只需要一個操作數參與運算。運算時,二進制數上的每位取反,即1變為0, 0變為1.
這里涉及到數字在計算機中的存儲形式,在計算機中,最高位為符號位,符號位為0時表示正數,符號位為1時表示負數。
數字在計算機中是以補碼的形式進行存儲的,整數的補碼與原碼相同,負數的補碼是在原碼的基礎上除符號位外,按位取反后,再加1.
如 +1,原碼為0 0001,補碼為 0 0001.
-1 ,原碼為1 0001,補碼為:1 1111。
再如:+2 ,原碼為: 0 0010,補碼為:0 0010.
-2,原碼為:1 0010,補碼為:1 1110
10按位取反運算(第1位為符號位):
~ 0 1 0 1 0
--------------
1 0 1 0 1
結果最高位為1,為負數,因為負數在計算機中以補碼形式存儲,轉換為原碼(先減1,再按位反)為:
1 1011
即對應的十進制數為 -11,即: ~10 = -11.
5 按位取反運算:
~ 0 0 1 0 1
---------------
1 1 0 1 0
結果對應的原碼為: 1 0110,對應的十進制數為:-6
在Python中的運行結果:
(5)<<:按位左移運算符
其形式為:m<<n
按位左移運算,m對應的二進制數的每位向左移動n位,后面補0.
如10的二進制數 1010 向左移動兩位后為:10 1000,其對應的十進制數為:40.
5的二進制數:0101,向左移動兩位后為:1 0100,其對應的十進制數為:20
也就是說,一個整數左移n位相當于這個數 m×2n
在Python中的運算結果:
(6)>>:按位右移運算符
其形式為:m >> n
即m對應的二進制數每位向右移動n位,移出的二進制數字去掉,最左邊空出的變為0.
10的二進制 1010 向右移動1位為:0101,即變為十進制的5;再移動1位變為0010,變為2,再移動1位變為0001,變為1,再移動就一直為0了。
即每向右移動1位,相當于原數除以2,只保留整數部分;移動n位,相當于原數除以2n,只保留整數部分。
在Python中的運算結果:
新聞熱點
疑難解答