Python pruža sljedeće bitne operatore koji izvode logičku konjunkciju, logičku disjunkciju, isključivu disjunkciju, bitnu inverziju, pomak bita ulijevo i pomak bita udesno za svaki bit binarnog cjelobrojnog tipa int vrijednosti, respektivno.
&
|
^
~
<<
>>
U ovom odjeljku prvo ćemo objasniti sljedeće.
- križanje(AND) :
&
- disjunkcija(OR) :
|
- ISKLJUČIVO-ILI rad(XOR) :
^
Zatim ćemo razgovarati o sljedećem.
- Bitne operacije nad negativnim cijelim brojevima
- bit flip( NOT) :
~
- bitni pomak:
<<
,>>
Za više informacija o tome kako pisati cijele brojeve u binarnom, oktalnom i heksadecimalnom obliku te kako pretvoriti binarne, oktalne i heksadecimalne brojeve i nizove pomoću sljedećih funkcija, pogledajte sljedeći članak.
bin()
oct()
hex()
format()
- Povezani članci:Pretvorite binarne, oktalne i heksadecimalne brojeve i nizove jedan u drugi i iz drugog u Pythonu
Također, za logičke operacije (Booleove operacije) na booleovim vrijednostima (true, false) umjesto bitnih operacija pogledajte sljedeći članak. Koristite i,ili umjesto &,|.
- Povezani članci:Pythonovi logički operatori and, or, and not (logička konjunkcija, disjunkcija, negacija)
križanje(AND) :&operater
Ovo je primjer logičkog I koji koristi & operator, s rezultatom pretvorenim u niz u binarnom zapisu pomoću bin().
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
disjunkcija(OR) :|operater
Primjer logičkog proizvoda (OR) koji koristi | operator, s rezultatom koji se pretvara u niz u binarnom zapisu pomoću bin() i izlazi zajedno.
print(x | y) print(bin(x | y)) # 11 # 0b1011
ISKLJUČIVO-ILI rad(XOR) :^operater
Primjer logičkog proizvoda (XOR) koji koristi operator ^, u kombinaciji s rezultatom pretvorbe u niz u binarnom zapisu pomoću bin().
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
Odnos između ulaza i izlaza za svaki bit logičkog I, ILI i XOR prikazan je u donjoj tablici.
Unos 1 | Unos 2 | križanje(AND) | disjunkcija(OR) | ISKLJUČIVO-ILI rad(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
Bitne operacije nad negativnim cijelim brojevima
Kada se bitna operacija izvodi nad negativnim cijelim brojem, vrijednost se obrađuje kao da je izražena u obliku komplementa dva.
Međutim, imajte na umu da ako pretvorite negativan cijeli broj u binarni niz pomoću bin() ili format(), apsolutna vrijednost će imati predznak minus umjesto formata komplementa dvojke.
Ako želite dobiti niz s komplementarnim prikazom dva, uzmite I s maksimalnim potrebnim brojem bitova, kao što je prikazano u nastavku.
- Za 4-bitne
0b1111
(=0xf
) - Za 8-bitne
0xff
- Za 16-bitne
0xffff
Možete dobiti niz prikaza komplementa dva (svaki bit je obrnut i 1 se dodaje).
x = -9 print(x) print(bin(x)) # -9 # -0b1001 print(bin(x & 0xff)) print(format(x & 0xffff, 'x')) # 0b11110111 # fff7
- Povezani članci:Pretvorite binarne, oktalne i heksadecimalne brojeve i nizove jedan u drugi i iz drugog u Pythonu
bit flip:~operater
~primjer okretanja bita s operatorima.
Bitna inverzija nije samo vrijednost svakog invertiranog bita. Povratna vrijednost kada se koristi ovaj operator je sljedeća.~x
#ERROR!-(x+1)
-(x+1)
Ova vrijednost je ekvivalentna razmatranju ulazne vrijednosti x kao komplementarnog oblika dvojke i invertiranju svih bitova.
Kao što je gore spomenuto, u Pythonu, kada se negativni cijeli broj pretvara u binarni niz pomoću bin(), format(), itd., on nije u komplementarnom obliku dva, već u apsolutnoj vrijednosti sa predznakom minus. Stoga, pretvaranje ~x izravno u niz neće rezultirati nizom s invertiranim bitovima izvorne vrijednosti.
x = 9 # 0b1001 print(~x) print(bin(~x)) # -10 # -0b1010
Kada izvedemo operaciju AND i pretvorimo je u niz komplementarnog prikaza dvojke, možemo vidjeti da su bitovi izvorne vrijednosti invertirani.
Osim toga, na primjer, da biste dobili niz bitova koji je 4-znamenkasti niz bitova obrnut kakav jest (značni bit je izostavljen), upotrijebite format() da popunite nule za vrijednost AND na sljedeći način04b'
print(bin(~x & 0xff)) print(format(~x & 0b1111, '04b')) # 0b11110110 # 0110
bitni pomak:<<,>>
Primjeri pomaka bita ulijevo i desnog pomaka bita pomoću operatora pomaka bita.
x = 9 # 0b1001 print(x << 1) print(bin(x << 1)) # 18 # 0b10010 print(x >> 1) print(bin(x >> 1)) # 4 # 0b100
Za negativne vrijednosti, bit predznaka se produžuje i pomiče, a pozitivni/negativni predznak ostaje isti. Negativna vrijednost je slika retka od 1s skroz lijevo.
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
Bolje je razmišljati u terminima nizova izraza komplementa dvojke, budući da razmišljanje u terminima brojeva nije jasno.