在python中,位運算分爲按位與運算(&)、按位或運算(|)、按位異或運算(^)、按位取反運算(~)、按位左移運算(<<)和按位右移運算(>>),當然了在别的編程語言裏面也有涉及這個知識點,譬如C語言、PHP語言、JAVA語言等等,原理都是想通的,俗話說的好“溫故而知新”,我在這裏把這個知識點再強調一遍。
學過計算機的人對二進制并不陌生,這個位運算其實就是基于二進制的,那麽我們在python代碼中什麽兩個變量,方便我們通過實驗來講解位運算:
a = 623 #變量a的二進制爲:0010 0110 1111
b = 139 #變量b的二進制爲:0000 1000 1011
1、按位與運算(&)
我們先把a和b進行按位于運算,也就是
print a&b #打印的結果是11
爲什麽結果是11呢?其實在按位與運算中,參與運算的兩個值,如果兩個相應位都爲1,則該位的結果爲1,否則爲0,那麽a和b進行按位與運算之後的二進制就是“0000 0000 1011”,将這個二進制的數字轉換成十進制結果就是11。請看下面的按位與運算圖解:
2、按位或運算(|)
print a|b # 打印結果是751
在按位或運算中,隻要對應的二個二進位有一個爲1時,結果位就爲1。那麽a和b進行按位或運算的的二進制結果就爲0010 1110 1111,轉換爲二進制的結果就是751。請看下面的按位或運算圖解:
3、按位異或運算(^)
print a^b # 運算結果爲740
在按位異或運算中,當兩對應的二進位相異時,結果爲1,相同則爲0,那麽a和b進行按位異或運算的二進制結果就爲0010 1110 0100,轉換爲二進制的結果就爲740。請看下面的按位異或運算圖解:
4、按位取反運算(~)
print ~a # 運算結果爲-624
print ~b # 運算結果爲-140
在按位取反運算中,對數據的每個二進制位取反,即把1變爲0,把0變爲1 。~a的二進制按位取反運算後的二進制結果爲1111 1101 1001 0000轉換爲10進制的結果是-624,~b的二進制按位取反運算後的二進制結果爲1111 0111 0100,轉換爲十進制的結果爲-140,這裏涉及到反碼、補碼知識,忘記了的同學請自行惡補!請看下面的按位取反運算圖解:
5、按位左移運算(<<)
print a<<b #運算結果爲434167633083893069286773515120622788069556224
在左移動運算中,運算數的各二進位全部左移若幹位,由 << 右邊的數字指定了移動的位數,高位丢棄,低位補0。因爲數字太大了,我就懶得寫了。
6、按位右移運算(>>)
print a>>b #運算結果爲0
在右移動運算中,把”>>”左邊的運算數的各二進位全部右移若幹位,>> 右邊的數字指定了移動的位數,這個數字推算起來也不得了,我也就不多寫了,你知道是怎麽回事就行了。
a<<b其實就是把a轉換成二進制,向左移動139位,然後在轉換成十進制。
a>>b其實就是把a轉換成二進制,向右移動139位,然後在轉換成十進制。
因爲例子中的數字太大,我現在把數字變小一點,方便大家理解
a=11 #二進制爲1011
b=3 #二進制爲11
那麽a<<b的運算結果如下:
0000 0000 1011
向左邊移動3個位置,結果就爲:
0000 0101 1000
轉換成十進制就等于88
a>>b的運算結果如下:
那麽a>>b的運算結果如下:
0000 0000 1011
向右邊邊移動3個位置,結果就爲:
0000 0000 0001
轉換成十進制就等于1
針對python的位運算今天就講這麽多,如果你還有不明白的,歡迎在下方留言,咱們一起學習,共同研究!
評論0