Python pakub järgmisi bititihedaid operaatoreid, mis täidavad vastavalt loogilist konjunktsiooni, loogilist disjunktsiooni, eksklusiivset disjunktsiooni, bititihedat inversiooni, vasaku biti nihet ja parema biti nihet binaarse täisarvu tüüpi int väärtuse iga biti suhtes.
&
|
^
~
<<
>>
Selles jaotises selgitame kõigepealt järgmist.
- ristmik (AND) :
&
- disjunktsioon (OR) :
|
- EXCLUSIVE-OR operatsioon (XOR) :
^
Järgnevalt arutame järgmist.
- Bititihedad operatsioonid negatiivsete täisarvudega
- bittide pööramine ( NOT) :
~
- biti nihkumine :
<<
,>>
Lisateavet selle kohta, kuidas kirjutada täisarvusid binaarses, kaheksakohalises ja kuueteistkümnendsüsteemis ning kuidas teisendada binaar-, kaheksakohalisi ja kuueteistkümnendsüsteemi numbreid ja jadasid järgmiste funktsioonide abil, leiate järgmisest artiklist: “Binaar-, kaheksakohalisi ja kuueteistkümnendsüsteem”.
bin()
oct()
hex()
format()
- Seotud artiklid:Binaarsete, oktaal- ja heksadetsimaalsete arvude ja stringide teisendamine Pythonis teineteiseks ja teiseks.
Samuti, loogiliste operatsioonide (Boole'i operatsioonide) kohta bool'i väärtustega (true, false) bittide kaupa tehtavate operatsioonide asemel, vt järgmist artiklit. Kasutage ja,või asemel &,|.
- Seotud artiklid:Pythoni loogilised operaatorid ja, või ja mitte (loogiline konjunktsioon, disjunktsioon, eitus)
ristmik (AND) : &operaator
See on näide loogilisest AND-ist, kasutades operaatorit &, mille tulemus teisendatakse bin() abil stringiks binaarses märkimisviisis.
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
disjunktsioon (OR) : |operaator
Näide loogilisest produktist (VÕI), kasutades operaatorit |, mille tulemus teisendatakse bin() abil stringiks binaarses märkimisviisis ja väljastatakse koos.
print(x | y) print(bin(x | y)) # 11 # 0b1011
EXCLUSIVE-OR operatsioon (XOR) : ^operaator
Näide loogilisest produktist (XOR), kasutades operaatorit ^, kombineerituna bin() abil stringiks teisendamise tulemusega binaarses märkimisviisis.
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
Iga loogilise AND-, OR- ja XOR-biti sisendi ja väljundi vaheline seos on näidatud alljärgnevas tabelis.
Sisend 1 | Sisend 2 | ristmik (AND) | disjunktsioon (OR) | EXCLUSIVE-OR operatsioon (XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
Bititihedad operatsioonid negatiivsete täisarvudega
Kui negatiivse täisarvuga tehakse bitioperatsioon, töödeldakse väärtust nii, nagu oleks see väljendatud kahekomplektilises vormis.
Pange aga tähele, et kui te teisendate negatiivse täisarvu bin() või format() abil binaarseks stringiks, siis on absoluutväärtus miinusmärgiga, mitte kahekomplektilise formaadiga.
Kui soovite saada stringi kahekomplektilise esitusviisiga, võtke AND koos maksimaalse nõutava bitikohtade arvuga, nagu on näidatud allpool.
- 4-bitise versiooni puhul
0b1111
(=0xf
) - 8-bitise versiooni puhul
0xff
- 16-bitise versiooni puhul
0xffff
Saate stringi kahekomplektilise esitusviisi (iga bitt on inverteeritud ja 1 on lisatud).
x = -9 print(x) print(bin(x)) # -9 # -0b1001 print(bin(x & 0xff)) print(format(x & 0xffff, 'x')) # 0b11110111 # fff7
- Seotud artiklid:Binaarsete, oktaal- ja heksadetsimaalsete arvude ja stringide teisendamine Pythonis teineteiseks ja teiseks.
bittide pööramine : ~operaator
~näide bittide pööramisest operaatoritega.
Biti kaupa inverteerimine ei ole lihtsalt iga biti väärtuse inverteerimine. Selle operaatori kasutamisel on tagastusväärtus järgmine.~x
=-(x+1)
-(x+1)
See väärtus on samaväärne sisendväärtuse x käsitlemisega kahekomplementaarsel kujul ja kõigi bittide inverteerimisega.
Nagu eespool mainitud, on Pythonis, kui negatiivne täisarv teisendatakse bin(), format() jne abil binaarseks stringiks, see mitte kahekomplektilises vormis, vaid absoluutväärtusena koos miinusmärgiga. Seetõttu ei anna ~x otsene teisendamine stringiks tulemuseks stringi, mille algväärtuse bitid on inverteeritud.
x = 9 # 0b1001 print(~x) print(bin(~x)) # -10 # -0b1010
Kui teeme AND-operatsiooni ja muudame selle stringi kahekomplektiliseks esituseks, näeme, et algväärtuse bitid on inverteeritud.
Lisaks, näiteks, et saada bittide string, mis on 4-kohaline bittide string inverteeritud nagu on (märgibitt välja jäetud), kasutage format(), et täita nullid ANDitud väärtuse jaoks järgnevalt'04b'
print(bin(~x & 0xff)) print(format(~x & 0b1111, '04b')) # 0b11110110 # 0110
biti nihkumine : << , >>
Näited vasakpoolse biti nihke ja parempoolse biti nihke kohta biti nihkeoperaatorite abil.
x = 9 # 0b1001 print(x << 1) print(bin(x << 1)) # 18 # 0b10010 print(x >> 1) print(bin(x >> 1)) # 4 # 0b100
Negatiivsete väärtuste puhul pikendatakse ja nihutatakse märgibitti ning positiivne\negatiivne märk jääb samaks. Negatiivne väärtus kujutab endast 1s-rea kujutist kogu vasakule.
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
Parem on mõelda kahekomplektiliste avaldiste jadana, sest arvudes mõtlemine ei ole selge.