Operatorët në bit Python (produkt logjik, OR logjik, OR ekskluzive, përmbysje, zhvendosje)

biznes

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()

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ë &,|.

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 1Hyrja 2kryqëzim(AND)ndarje(OR)Operacioni EKSKLUZIV-OR(XOR)
11110
10011
01011
00000

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-bit0b1111(=0xf)
  • Për 8-bit0xff
  • Për 16-bit0xffff

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

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ë.

Copied title and URL