直接截圖粘貼了,這些符號(hào)在python中都被稱作位運(yùn)算符曹仗,
位操作是程序設(shè)計(jì)中對(duì)位模式按位或二進(jìn)制數(shù)的一元和二元操作榨汤。
計(jì)算機(jī)只認(rèn)識(shí)0和1,也就是二進(jìn)制怎茫,而人類很難理解收壕,于是就有了位運(yùn)算符稱作0和1,如實(shí)現(xiàn)A+B不用加號(hào)運(yùn)算轨蛤,用的就是位運(yùn)算符蜜宪。
一個(gè)個(gè)講解
& 按位與運(yùn)算??
當(dāng)兩個(gè)開關(guān)都為真,及連接時(shí)才能亮燈祥山,在python中圃验,何時(shí)為false,何時(shí)為trun,一般為0,或?yàn)榭諘r(shí)為false缝呕,如數(shù)字0澳窑,空集合,空列表供常,空字符串摊聋,空字典,空字符串话侧,還有表示什么都不在的None栗精。其他都為trun。
所以操作時(shí)0&0=0,表示連個(gè)開關(guān)都為關(guān)瞻鹏,燈也就不亮悲立,0&1=1,表示一個(gè)開關(guān)斷開新博,一個(gè)開關(guān)連接薪夕,燈還是不亮,1&1=1赫悄,連個(gè)開關(guān)都連接原献,那么燈也亮馏慨。100&100=100.不為0,表示都連接姑隅,燈亮写隶,100都可以認(rèn)為是表示真。100&0=0讲仰,一個(gè)不連接就不亮
但5&6=4慕趴,為什么呢?重新看一下名字鄙陡,按位與運(yùn)算符冕房。a&b,計(jì)算機(jī)只認(rèn)識(shí)二進(jìn)制數(shù)0和1趁矾,&符號(hào)運(yùn)算規(guī)則是都為1就記作1耙册,否則記作0.
先將5和6變成二進(jìn)制數(shù),內(nèi)置函數(shù)bin()將10進(jìn)制轉(zhuǎn)換為2進(jìn)制毫捣。
bin(5)=? ?1? ?0? ?1
bin(6)=? ?1? ?1? ?0
5&6? ?=? ?1? ?0? ?0
再將2進(jìn)制轉(zhuǎn)換為10進(jìn)制详拙,內(nèi)置函數(shù)int? ? int('100',2)=4
第二個(gè)運(yùn)算符是? |? ?鍵盤不好找,shift加反斜杠
|? ?或運(yùn)算蔓同,一真及真溪厘,
我畫的好像是電阻,不是電池牌柄,無所謂了,如圖所示侧甫,只要有一個(gè)開關(guān)連通就行珊佣。
按位或運(yùn)算時(shí)只要不是a|b都不為0就行,也就是但a|b=0,那就是a=b=0.
然后就是今天的關(guān)鍵了披粟,^咒锻,按位異或運(yùn)算符,
按位運(yùn)算是對(duì)二進(jìn)制數(shù)的守屉,那就是不是0就是1惑艇,對(duì)于^,當(dāng)對(duì)應(yīng)的二進(jìn)制位相異時(shí)為1。
如bin(22)=1? ?0? ?1? ?1? ?0
????bin(7)=? ? ? ? ? ? 1? ?1? ?1? ? ? ? ? ??
? ? ? ? ? ? ? = 1? ?0? ?0? ?0? ?1
對(duì)位相異為1拇泛,不對(duì)位直接落下滨巴,相同就為0
0^0=0
0^8=? ? 0? ?0? ?0? ?0
? ? ? ? ? ? 1? ?0? ?1? ?0?
? ? ? ? ? ? 1? ?0? ?1? ?0
0^x? 如果x不為零,那么0^x=x? ? 如果x=0,0^0=0俺叭,0也是0本身
任何數(shù)和0做異或操作都為其本身
? ? ?x^x =? *? *? *? *
? ? ? ? ? ? ? ?*? *? *? *
? ? ? ? ? ? ? ? 0 0 0 0? ? ? ? ? ?任何數(shù)與其本身做異或操作都等于0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
理解這些剩下的就簡單了
~按位取反運(yùn)算符
如bin(9)=1001
~9就是對(duì)1001按位取反恭取,0變1,1變0,那就是0110
int('0110',2)=6
<<左移運(yùn)算符
>>右移運(yùn)算符
箭頭指向哪里就是什么移
4<<1? ?就是4的二進(jìn)制數(shù)向左移動(dòng)1位
bin(4)=? ? ? ?1? ?0? ?0
?4<<1=? 1? ?0? ?0? ?0? ? =? 8? ?左移用0填補(bǔ)末尾
8>>2? 就是8的二進(jìn)制數(shù)向右移動(dòng)兩位
bin(8) =? ? 1? ?0? ?0? ?0
8>>2? =? ? ? ? ? ? ? 1? ?0? ?=? 2? ?左移多余部分舍去