Python býður upp á eftirfarandi bitaaðgerðir, sem framkvæma rökræna samtengingu, röklega sundrun, einkasundrun, bitabreytingu, vinstri bitaskiptingu og hægri bitaskiptingu á hvern bita af int gildi tvöfaldrar heiltölutegundar, í sömu röð.
&
|
^
~
<<
>>
Í þessum kafla útskýrum við fyrst eftirfarandi.
- gatnamót(AND) :
&
- sundurliðun(OR) :
|
- EXCLUSIVE-OR rekstur(XOR) :
^
Næst munum við ræða eftirfarandi.
- Bitvisar aðgerðir á neikvæðum heiltölum
- smá flipp( NOT) :
~
- bitaskipti:
<<
,>>
Fyrir frekari upplýsingar um hvernig á að skrifa heilar tölur í tvíundir, áttund og sextán, og hvernig á að umbreyta tvíundir, áttund og sextán tölur og strengi með því að nota eftirfarandi aðgerðir, sjá eftirfarandi grein.
bin()
oct()
hex()
format()
- Tengdar greinar:Umbreyttu tvíundir, áttund og sextánda tölur og strengi til og frá hvor öðrum í Python
Einnig, fyrir rökréttar aðgerðir (Boolean-aðgerðir) á Boole-gildum (satt, ósatt) í stað bitaaðgerða, vísa til eftirfarandi greinar. Notaðu og,eða í staðinn fyrir &,|.
- Tengdar greinar:Rökfræðilegir rekstraraðilar Python og, eða, og ekki (rökræn samtenging, sundrun, neitun)
gatnamót(AND) :&rekstraraðili
Þetta er dæmi um rökrétt OG með því að nota & rekstraraðila, þar sem niðurstöðunni er breytt í streng í tvíundarskrift með bin().
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
sundurliðun(OR) :|rekstraraðili
Dæmi um rökræna vöru (OR) sem notar | rekstraraðila, með niðurstöðunni umbreytt í streng í tvíundarskrift með bin() og úttak saman.
print(x | y) print(bin(x | y)) # 11 # 0b1011
EXCLUSIVE-OR rekstur(XOR) :^rekstraraðili
Dæmi um rökræna afurð (XOR) sem notar ^ rekstraraðila, ásamt niðurstöðu umbreytingar í streng í tvíundarmerkingu með bin().
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
Sambandið milli inntaks og úttaks fyrir hvern bita af rökrænum OG, EÐA og XOR er sýnt í töflunni hér að neðan.
Inntak 1 | Inntak 2 | gatnamót(AND) | sundurliðun(OR) | EXCLUSIVE-OR rekstur(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
Bitvisar aðgerðir á neikvæðum heiltölum
Þegar bitaaðgerð er framkvæmd á neikvæðri heiltölu, er gildið unnið eins og það væri gefið upp í tvöföldu formi.
Athugaðu hins vegar að ef þú breytir neikvæðri heiltölu í tvíundarstreng með því að nota bin() eða format(), mun algildið hafa mínusmerki í stað tveggja viðbótarsniðs.
Ef þú vilt fá streng með tvíhliða framsetningu, taktu AND með hámarksfjölda bitastafa sem krafist er, eins og sýnt er hér að neðan.
- Fyrir 4-bita
0b1111
(=0xf
) - Fyrir 8-bita
0xff
- Fyrir 16 bita
0xffff
Þú getur fengið streng með samhljóðaframsetningu tveggja (hver bita er snúið við og 1 bætt við).
x = -9 print(x) print(bin(x)) # -9 # -0b1001 print(bin(x & 0xff)) print(format(x & 0xffff, 'x')) # 0b11110111 # fff7
- Tengdar greinar:Umbreyttu tvíundir, áttund og sextánda tölur og strengi til og frá hvor öðrum í Python
smá flipp:~rekstraraðili
~dæmi um bitaflipping með rekstraraðila.
Bita snúningur er ekki einfaldlega gildi hvers bita sem er snúið við. Skilagildið þegar þessi rekstraraðili er notaður er sem hér segir.~x
#ERROR!-(x+1)
-(x+1)
Þetta gildi jafngildir því að líta á inntaksgildið x sem tveggja viðbótarform og snúa öllum bitunum við.
Eins og nefnt er hér að ofan, í Python, þegar neikvæðri heiltölu er breytt í tvíundarstreng með því að nota bin(), snið() o.s.frv., þá er hún ekki á formi tveggja, heldur í algildi með mínusmerki. Þess vegna mun það að breyta ~x beint í streng ekki leiða til strengs með bitum upprunalega gildisins snúið við.
x = 9 # 0b1001 print(~x) print(bin(~x)) # -10 # -0b1010
Þegar við framkvæmum AND aðgerðina og breytum henni í streng með samhljóðaframsetningu tveggja, getum við séð að bitum upprunalega gildisins er snúið við.
Að auki, til dæmis, til að fá bitastreng sem er 4 stafa bitastrengur sem er snúinn eins og hann er (táknbiti sleppt), notaðu format() til að fylla út núllin fyrir ANDed gildið sem hér segir04b'
print(bin(~x & 0xff)) print(format(~x & 0b1111, '04b')) # 0b11110110 # 0110
bitaskipti:<<,>>
Dæmi um vinstri bitaskiptingu og hægri bitaskiptingu með því að nota bitaskiptingu.
x = 9 # 0b1001 print(x << 1) print(bin(x << 1)) # 18 # 0b10010 print(x >> 1) print(bin(x >> 1)) # 4 # 0b100
Fyrir neikvæð gildi er táknbitinn framlengdur og færður og jákvætt/neikvætt táknið helst það sama. Neikvætt gildi er mynd af línu 1s alla leið til vinstri.
x = -9 print(bin(x)) print(bin(x & 0xff)) # -0b1001 # 0b11110111 print(x << 1) print(bin(x << 1)) print(bin((x << 1) & 0xff)) # -18 # -0b10010 # 0b11101110 print(x >> 1) print(bin(x >> 1)) print(bin((x >> 1) & 0xff)) # -5 # -0b101 # 0b11111011
Það er betra að hugsa út frá strengjum sambótarsagna tveggja, þar sem hugsun út frá tölum er ekki skýr.