Python ofron operatorët e mëposhtëm bit, të cilët kryejnë respektivisht lidhjen logjike, ndarjen logjike, ndarjen ekskluzive, përmbysjen bit, zhvendosjen e bitit majtas dhe zhvendosjen e bitit djathtas në secilin bit të një vlere int të tipit binar të plotë.
&
|
^
~
<<
>>
Në këtë pjesë, ne fillimisht shpjegojmë sa vijon.
- kryqëzim(AND) :
&
- ndarje(OR) :
|
- Operacioni EKSKLUZIV-OR(XOR) :
^
Më tej, ne do të diskutojmë në vijim.
- Operacionet në bit në numra të plotë negativ
- rrokullisje bit( NOT) :
~
- ndryshim bit:
<<
,>>
Për më shumë informacion se si të shkruani numra të plotë në binar, oktal dhe heksadecimal, dhe si të konvertoni numrat dhe vargjet binar, oktal dhe heksadecimal duke përdorur funksionet e mëposhtme, shihni artikullin vijues.
bin()
oct()
hex()
format()
- Artikuj të ngjashëm:Konvertoni numrat dhe vargjet binar, oktal dhe heksadecimal me dhe nga njëri-tjetri në Python
Gjithashtu, për operacionet logjike (operacionet Boolean) në vlerat boolean (true, false) në vend të operacioneve bitwise, referojuni artikullit vijues. Përdorni dhe, ose në vend të &,|.
- Artikuj të ngjashëm:Operatorët logjikë të Python dhe, ose, dhe jo (lidhje logjike, shkëputje, mohim)
kryqëzim(AND) :&operatori
Ky është një shembull i një DHE logjik duke përdorur & operator, me rezultatin e konvertuar në një varg në shënimin binar nga bin().
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
ndarje(OR) :|operatori
Një shembull i një produkti logjik (OR) duke përdorur | operatori, me rezultatin të konvertuar në një varg në shënimin binar nga bin() dhe të dalë së bashku.
print(x | y) print(bin(x | y)) # 11 # 0b1011
Operacioni EKSKLUZIV-OR(XOR) :^operatori
Shembull i një produkti logjik (XOR) duke përdorur operatorin ^, i kombinuar me rezultatin e konvertimit në një varg në shënimin binar duke përdorur bin().
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
Marrëdhënia midis hyrjes dhe daljes për çdo bit logjik AND, OR dhe XOR është paraqitur në tabelën më poshtë.
Hyrja 1 | Hyrja 2 | kryqëzim(AND) | ndarje(OR) | Operacioni EKSKLUZIV-OR(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
Operacionet në bit në numra të plotë negativ
Kur një operacion në bit kryhet në një numër të plotë negativ, vlera përpunohet sikur të ishte shprehur në formën e plotësimit të dy.
Vini re, megjithatë, se nëse konvertoni një numër të plotë negativ në një varg binar duke përdorur bin() ose format(), vlera absolute do të ketë një shenjë minus në vend të formatit të plotësimit të dy.
Nëse dëshironi të merrni një varg me paraqitjen e dy komplementit, merrni AND me numrin maksimal të shifrave të bitave të kërkuara, siç tregohet më poshtë.
- Për 4-bit
0b1111
(=0xf
) - Për 8-bit
0xff
- Për 16-bit
0xffff
Ju mund të merrni një varg të paraqitjes së dy komplementit (çdo bit është i përmbysur dhe 1 shtohet).
x = -9 print(x) print(bin(x)) # -9 # -0b1001 print(bin(x & 0xff)) print(format(x & 0xffff, 'x')) # 0b11110111 # fff7
- Artikuj të ngjashëm:Konvertoni numrat dhe vargjet binar, oktal dhe heksadecimal me dhe nga njëri-tjetri në Python
rrokullisje bit:~operatori
~shembull i rrotullimit të bitit me operatorë.
Inversioni në bit nuk është thjesht vlera e çdo biti të përmbysur. Vlera e kthimit kur përdoret ky operator është si më poshtë.~x
#ERROR!-(x+1)
-(x+1)
Kjo vlerë është ekuivalente me marrjen në konsideratë të vlerës hyrëse x si formë e plotësimit të dy dhe përmbysjen e të gjitha biteve.
Siç u përmend më lart, në Python, kur një numër i plotë negativ konvertohet në një varg binar duke përdorur bin(), format(), etj., ai nuk është në formën e plotësimit të dy, por në vlerë absolute me shenjën minus. Prandaj, konvertimi i ~x drejtpërdrejt në një varg nuk do të rezultojë në një varg me bitet e vlerës origjinale të përmbysur.
x = 9 # 0b1001 print(~x) print(bin(~x)) # -10 # -0b1010
Kur kryejmë operacionin AND dhe e kthejmë atë në një varg të paraqitjes së dy komplementit, mund të shohim se bitet e vlerës origjinale janë të përmbysura.
Përveç kësaj, për shembull, për të marrë një varg bit-i që është një varg bit-shifror i përmbysur siç është (biti i shenjës është hequr), përdorni format() për të plotësuar zerat për vlerën ANDed si më poshtë04b'
print(bin(~x & 0xff)) print(format(~x & 0b1111, '04b')) # 0b11110110 # 0110
ndryshim bit:<<,>>
Shembuj të zhvendosjes së bitit të majtë dhe zhvendosjes së bitit djathtas duke përdorur operatorët e zhvendosjes së bitit.
x = 9 # 0b1001 print(x << 1) print(bin(x << 1)) # 18 # 0b10010 print(x >> 1) print(bin(x >> 1)) # 4 # 0b100
Për vlerat negative, biti i shenjës zgjatet dhe zhvendoset, dhe shenja pozitive/negative mbetet e njëjtë. Një vlerë negative është një imazh i një rreshti prej 1 deri në të majtë.
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
Është më mirë të mendosh në terma të vargjeve të shprehjeve plotësuese të dy, pasi të menduarit në terma të numrave nuk është i qartë.