Python中的位運(yùn)算是程序設(shè)計中對位模式或二進(jìn)制的一元和二元操作。
按位運(yùn)算就是把數(shù)字轉(zhuǎn)換為機(jī)器語言---以二進(jìn)制形式表示
Python中的位運(yùn)算有哪些?
在Python中,按位運(yùn)算符有左移運(yùn)算符(<<)、右移運(yùn)算符(>>)、按位與運(yùn)算(&)、按位或運(yùn)算(|)、按位取反運(yùn)算(~)、異或運(yùn)算符,其中按位取反運(yùn)算符為單目運(yùn)算符
按位左移運(yùn)算符(<<)
在機(jī)器語言中,任何形式均以二進(jìn)制的形式進(jìn)行表示:
舉例:7<<2
二進(jìn)制為:111 左移兩位:11100 最后結(jié)果為:28

按位右移運(yùn)算符(>>)
具體的使用形式和左移一樣。
舉例:7>>2
28>>2
二進(jìn)制:7的二進(jìn)制為:111,右移兩位后為001,結(jié)果即為1
28的二進(jìn)制為:11100,右移兩位后為00111,結(jié)果為7

由于正數(shù)和負(fù)數(shù)的二進(jìn)制形式不同,所以此處特別說下以下兩個運(yùn)算。在計算機(jī)中,負(fù)數(shù)的二進(jìn)制形式是其正數(shù)的補(bǔ)碼形式,此處不做特別的說明,需要知道的以下給出一個鏈接:http://www.cnblogs.com/junsky/archive/2009/08/06/1540727.html
按位與運(yùn)算(&)
- 正數(shù)和正數(shù)的與運(yùn)算:
舉例: 7&9
二進(jìn)制:7的二進(jìn)制為:0111,9的二進(jìn)制為:1001
說明:根據(jù)(1&1=1、1&0=0、0&1=0、0&0=0)即相同位置同為1結(jié)果即為1,否者為0,由此可見7&9的二進(jìn)制形式為:0111&1001 == 0001- 正數(shù)與負(fù)數(shù)的與運(yùn)算:
舉例:-7&5
二進(jìn)制:-7:1001,5:0101,結(jié)果為1
說明:此處你可能要問-7的二進(jìn)制和9的二進(jìn)制不是相同嗎?答案是不相同,在機(jī)器中-7的二進(jìn)制為:11111111 11111111 11111111 11111001,9的二進(jìn)制為:00000000 00000000 00000000 00001001。同樣根據(jù)上文的同為1既為1,所以結(jié)果為1。運(yùn)算最后結(jié)果的二進(jìn)制形式從最左側(cè)的第一個0前的1開始,直至右側(cè)結(jié)尾,將此數(shù)轉(zhuǎn)換為10進(jìn)制,重點(diǎn)是,此處不是依次相加,而是依次相減,得到的結(jié)果最后加上負(fù)號即為最后運(yùn)算的結(jié)果。- 負(fù)數(shù)與負(fù)數(shù)的與運(yùn)算:
舉例:-5&-8
二進(jìn)制:-5:11111011,-8:11111000結(jié)果為-8
說明:你可能會很疑惑,此處的結(jié)果明明是11111000,結(jié)果怎么是-8.原因是-5&-8的二進(jìn)制形式為:11111011&11111000 == 11111000,從最左側(cè)的第一個0前的1開始,直至右側(cè)結(jié)尾,將此數(shù)轉(zhuǎn)換為10進(jìn)制,重點(diǎn)是,此處不是依次相加,而是依次相減,得到的結(jié)果最后加上負(fù)號即為最后運(yùn)算的結(jié)果。

按位或運(yùn)算(|)
或運(yùn)算和與運(yùn)算十分相似,只是依據(jù)的邏輯運(yùn)算不同,或運(yùn)算的依據(jù)邏輯是相同位置有個為1結(jié)果即為1
- 正數(shù)與正數(shù)的或運(yùn)算:
舉例:7|9
二進(jìn)制:7:0111,9:1001
說明:根據(jù)(1|0=1、1|1=1、0|1=1、0|0=0)可知,7|9的二進(jìn)制形式為:0111|1001,結(jié)果為:15- 負(fù)數(shù)與正數(shù)的或運(yùn)算:
舉例:-7|9
二進(jìn)制:-7:11111001,9:00001001
說明:從最左側(cè)的第一個0前的1開始的數(shù),轉(zhuǎn)化為十進(jìn)制,需要進(jìn)行的是依次相減運(yùn)算。- 負(fù)數(shù)與負(fù)數(shù)的或運(yùn)算:
舉例:-5|-8
二進(jìn)制:-5:11111011,-8:11111000結(jié)果為-5
說明:運(yùn)算最后結(jié)果的二進(jìn)制形式從最左側(cè)的第一個0前的1開始,直至右側(cè)結(jié)尾,將此數(shù)轉(zhuǎn)換為10進(jìn)制,重點(diǎn)是,此處不是依次相加,而是依次相減,得到的結(jié)果最后加上負(fù)號即為最后運(yùn)算的結(jié)果。

按位取反運(yùn)算符(~)
將二進(jìn)制數(shù)+1之后乘以-1,假如x的二進(jìn)制數(shù)是y,x的按位翻轉(zhuǎn)是-(y+1)
舉例:-3
去反后:2
二進(jìn)制:-3:11111101 取反操作:-(11111101+1)== -(11111110)==2
異或運(yùn)算符(^)
二進(jìn)制對應(yīng)位相加,不進(jìn)位。依據(jù)邏輯為:(1^1=0、1^0=1、0^1=1、0^0=0),同樣依照,如果兩個數(shù)中一正一負(fù),則最后的二進(jìn)制轉(zhuǎn)十進(jìn)制時依次相減,如果同正同負(fù),則相加
- 正數(shù)和正數(shù)的異或運(yùn)算:
舉例:7^9
二進(jìn)制:7:0111,9:1001
說明:7^9的二進(jìn)制形式為:0111^1001 == 1110,十進(jìn)制為:14- 負(fù)數(shù)和正數(shù)的異或運(yùn)算:
舉例:-3^4
二進(jìn)制:-3:11111101,4:00000100
說明:-3^4的二進(jìn)制形式為:11111101^00000100 == 11111001,根據(jù)說明可以知道結(jié)果為-(222-1)== -7- 負(fù)數(shù)和負(fù)數(shù)的異或運(yùn)算:
舉例:-7^-9
二進(jìn)制:-7:11111001,-9:11110111
說明;-7^-9的二進(jìn)制形式為:11111001^11110111 == 00001110,根據(jù)說明可以知道結(jié)果為222+2*2+2=14
