位運算子是對二進位制數進行操作。在 python 中,位運算的過程為:輸入數值 -> 原碼 -> 補碼 -> 位運算 -> 補碼 -> 原碼 -> 顯示數值。我們用位運算子對數值進行位運算,實際上是對該數值的補碼進行位運算。位運算的結果仍然是補碼,顯示該數值時需系統會先轉化為原碼,然後得出對應的數值。
)輸出結果為:10
解釋:-0b0110
原碼為-0110
,因為是負數,所以補碼為11010
(新增一位表示符號)。而0b1111
原碼為01111
(新增一位表示符號),因為是正數,補碼和原碼相同,補碼為01111
。兩者的補碼進行與
運算,得到結果01010
,並且結果仍是補碼。輸出顯示時,系統會將該補碼轉化為原碼,然後得到真實數值。該補碼01010
為正數*(最高位為符號位),所以原碼也為01010
(最高位為符號位),解析為十進位制,即得到 10。
倘若兩個數字數不一樣長,如-0b0110 & 0b11111
,第乙個負數長度為 4,而第二個正數長度為 5。那麼在進行為運算時,要先使兩者長度一致,即在長度較短的那個數前面補 0。則,第乙個負數補乙個 0 變為00110
。最後,兩個數都在前面新增乙個符號位。第乙個數為負數,求補得到111010
。第二個數為正數,求補不變。所以,此時位運算為111010 & 011111
。符號位也要參與位運算,得到的結果就是011010
。輸出顯示時,系統會將該補碼轉化為原碼,然後得到真實數值。該補碼011010
為正數(最高位為符號位),所以原碼也為011010
(最高位為符號位),解析為十進位制,即得到 26。
print(-
0b0110&15
)
輸出結果:10
解釋:十進位制數15
的原碼為01111
(新增一位表示符號),其餘過程同第乙個例子,不再贅述。
print(-
0b0110
&0x0f
)
輸出結果:10
解釋:十六進製制數0x0f
的原碼為01111
(新增一位表示符號),其餘過程同第乙個例子,不再贅述。
print(-
6&15)
輸出結果:10
print(-
6&0x0f
)
輸出結果:10
print(-
0x6&
0xf)
輸出結果:10
位運算子
功能<<
按位左移,左移n位相當於乘以2的n次方
>>
按位右移 ,左移n位相當於除以2的n次方
&按位與,如果兩個相應的二進位制位都為 1,則該位的結果值為 1;否則為 0。
l按位或 ,兩個相應的二進位制位中只要有乙個為 1,該位的結果值為 1;否則為 0。
^按位異或 ,若參加運算的兩個二進位制位同號則結果為0,異號則結果為1
~按位取反,用來對乙個二進位制數按位取反,即將0變1,將1變0。
python運算子 之位運算子
支援的資料型別有數字 集合 set 僅支援 交集 並集 不同集 其他型別都不支援位運算。按位運算子是把數字看作二進位制來計算的。位運算子作用於所有的位上,並且按位運算。python中按位運算法則如下 假設a 60,b 13 操作符描述例項 按位與運算子,當且僅當兩個運算元的某一位都非0時,該位的結果...
Python位運算子
按位運算子是把數字看作二進位制來進行計算的。python中的按位運算法則如下 下表中變數 a 為 60,b 為 13,二進位制格式如下 a 0011 1100 b 0000 1101 a b 0000 1100 a b 0011 1101 a b 0011 0001 a 1100 0011運算子 描...
python位運算子
python位運算子 python的位運算子是把數字看作二進位制來進行計算的。按位與 如果兩個二進位都為1,則該位結果為1,否則為0 按位或 只要乙個為1,則為1,否則為0 按位異或 兩個二進位相異為為1 即兩個二進位要相反 否則為0 取反 對資料的每個二進位制位取反,即把1變0,把0變1 左移動 ...