python按位翻转_Python成为专业人士笔记-位操作符
“專業(yè)人士筆記”系列目錄:創(chuàng)帆云:Python成為專業(yè)人士筆記--強烈建議收藏!每日持續(xù)更新!?zhuanlan.zhihu.com
按位操作符直接操作二進制的字符串,這些是最基本的操作,并直接由中央處理器所支持。
在處理設備驅動程序、圖形底層、加密和網絡通信時,這些位操作是必需的。本文提供一些有用的知識和對應Python的按位運算符示例
Bitwise NOT 位操作:否
?運算符將翻轉數(shù)字中的所有位, 由于計算機使用帶符號的數(shù)字表示形式占大多數(shù),所以值得注意的是,二進制補碼符號用于在寫入負數(shù)的情況下對負二進制數(shù)進行前導(1) 編碼 而不是前導零(0)。
這意味著,如果您使用8位來表示您的二進制補碼,則將處理 從0000 0000到0111 1111代表從0到127的數(shù)字并保留1xxx xxxx來代表負數(shù)
八位兩位補碼的數(shù):
#位無符號值二進制補碼值
0000 0000 0 0
0000 0001 1 1
0000 0010 2 2
0111 1110 126 126
0111 1111 127 127
1000 0000 128 -128
1000 0001 129 -127
1000 0010 130 -126
1111 1110 254 -2
1111 1111 255 -1
從本質上講,這意味著1010 0110的無符號值為166(通過加(128 * 1)+(64 * 0)+(32 * 1)+(16 * 0)+(8 * 0)+(4 * 1)+(2 * 1)+(1 * 0)),它具有一個二進制補碼值 -90(通過添加(128 * 1)-(64 * 0)-(32 * 1)-(16 * 0)(8 * 0)-(4 * 1)-(2 * 1)-(1 * 0),以及對值的補碼)。
這樣,負數(shù)的范圍可以降至-128(1000 0000)。 Zero(0)表示為0000 0000,負號表示一(-1)為1111 1111,
這等同于?n = -n-1:
# 0 = 0b0000 0000
~0
#輸出: -1
#-1 = 0b1111 1111
# 1 = 0b0000 0001
~1
Out: -2
-2 = 1111 1110
2 = 0b0000 0010
~2
#輸出: -3
#因為-3 = 0b1111 1101
#123 = 0b0111 1011
~123
#輸出: -124
#因為 -124 = 0b1000 0100
注意,此操作應用于正數(shù)時的總體效果可以總結為:
~n -> -|n+1|
然后,當應用于負數(shù)時,相應的效果是:
~-n -> |n-1|
以下示例說明了最后一條規(guī)則:
#-0 = 0b0000 0000
~-0
#輸出 -1
#-1 = 0b1111 1111
# 0是這個規(guī)則的例外,因為-0總是== 0
#-1 = 0b1000 0001
~-1
#輸出: 0
#0 = 0b0000 0000
#-2 = 0b1111 1110
~-2
#輸出: 1
#1 = 0b0000 0001
# -123 = 0b1111 1011
~-123
#輸出: 122
#122 = 0b0111 1010
Bitwise AND 位操作:與
&操作符將執(zhí)行二進制“與”操作,如果在兩個操作數(shù)中都存在位,則復制該位。比如:
# 0 & 0 = 0
# 0 & 1 = 0
# 1 & 0 = 0
# 1 & 1 = 1
# 60 = 0b111100
# 30 = 0b011110
60 & 30
#輸出: 28
#28 = 0b11100
bin(60 & 30)
#輸出: 0b11100
Bitwise OR 位操作:或
‘|’操作符將執(zhí)行一個二進制“or”,如果它存在于任何一個操作數(shù)中,那么就會復制一個位,比如:
# 0 | 0 = 0
# 0 | 1 = 1
# 1 | 0 = 1
# 1 | 1 = 1
#60 = 0b111100
#30 = 0b011110
60 | 30
#輸出: 62
#62 = 0b111110
bin(60 | 30)
#輸出: 0b111110
Bitwise Left Shift 位操作: 向左位移
‘<
#2 = 0b10
2 << 2
#輸出: 8
#8 = 0b1000
bin(2 << 2)
#輸出: 0b1000
執(zhí)行1的左位移位相當于乘以2
7 << 1
#輸出: 14
執(zhí)行n的左位移位相當于乘以2**n :
3 << 4
#輸出: 48
Bitwise Right Shift 位操作: 向右位移
‘>>’ 操作符將執(zhí)行按位“右移”,即左操作數(shù)的值按右操作數(shù)提供的位數(shù)右移:
# 8 = 0b1000
8 >> 2
#輸出: 2
# 2 = 0b10
bin(8 >> 2)
#輸出: 0b10
執(zhí)行1的右位移位等于2的整數(shù)除法 :
36 >> 1
#輸出: 18
15 >> 1
#輸出: 7
執(zhí)行n的右位移位等于2**n的整數(shù)除法 :
48 >> 4
#輸出: 3
59 >> 3
#輸出: 7
重賦值操作
所有的位操作符(除了 ‘~’ ),都有固定的用法:
a = 0b001
a &= 0b010
#輸出 a = 0b000
a = 0b001
a |= 0b010
#輸出 a = 0b011
a = 0b001
a <<= 2
#輸出 a = 0b100
a = 0b100
a >>= 2
#輸出 a = 0b001
a = 0b101
a ^= 0b011
#輸出 a = 0b110
禁止轉載,違者必究!
總結
以上是生活随笔為你收集整理的python按位翻转_Python成为专业人士笔记-位操作符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你一秒无插件下载B站/MOOC课视频
- 下一篇: python字体描边_使用 python