Python中的位運(yùn)算是程序設(shè)計(jì)中對(duì)位模式或二進(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)制形式不同,所以此處特別說下以下兩個(gè)運(yùn)算啤握。在計(jì)算機(jī)中鸟缕,負(fù)數(shù)的二進(jìn)制形式是其正數(shù)的補(bǔ)碼形式,此處不做特別的說明排抬,需要知道的以下給出一個(gè)鏈接: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è)的第一個(gè)0前的1開始,直至右側(cè)結(jié)尾瞬逊,將此數(shù)轉(zhuǎn)換為10進(jìn)制檐迟,重點(diǎn)是,此處不是依次相加码耐,而是依次相減,得到的結(jié)果最后加上負(fù)號(hào)即為最后運(yùn)算的結(jié)果溶其。- 負(fù)數(shù)與負(fù)數(shù)的與運(yùn)算:
舉例:-5&-8
二進(jìn)制:-5:11111011协怒,-8:11111000結(jié)果為-8
說明:你可能會(huì)很疑惑类浪,此處的結(jié)果明明是11111000,結(jié)果怎么是-8.原因是-5&-8的二進(jìn)制形式為:11111011&11111000 == 11111000爽航,從最左側(cè)的第一個(gè)0前的1開始,直至右側(cè)結(jié)尾秋度,將此數(shù)轉(zhuǎn)換為10進(jìn)制,重點(diǎn)是,此處不是依次相加带猴,而是依次相減,得到的結(jié)果最后加上負(fù)號(hào)即為最后運(yùn)算的結(jié)果懈万。
按位或運(yùn)算(|)
或運(yùn)算和與運(yùn)算十分相似拴清,只是依據(jù)的邏輯運(yùn)算不同,或運(yùn)算的依據(jù)邏輯是相同位置有個(gè)為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è)的第一個(gè)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è)的第一個(gè)0前的1開始,直至右側(cè)結(jié)尾技肩,將此數(shù)轉(zhuǎn)換為10進(jìn)制且轨,重點(diǎn)是,此處不是依次相加虚婿,而是依次相減旋奢,得到的結(jié)果最后加上負(fù)號(hào)即為最后運(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)制對(duì)應(yīng)位相加至朗,不進(jìn)位。依據(jù)邏輯為:(1^1=0剧浸、1^0=1锹引、0^1=1、0^0=0),同樣依照唆香,如果兩個(gè)數(shù)中一正一負(fù)嫌变,則最后的二進(jìn)制轉(zhuǎn)十進(jìn)制時(shí)依次相減,如果同正同負(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