Operatorên bitwise yên Python (hilbera mentiqî, OR mentiqî, OR ya taybetî, vegerandin, veguheztin)

Dikan

Python operatorên bitwise yên jêrîn peyda dike, ku bi rêzê ve li ser her bit nirxek int-ya jimareya yekjimar a binary, hevbendiya mentiqî, veqetandina mentiqî, veqetandina taybetî, veguheztina bitwise, veguheztina bitê ya çepê, û veguheztina bitê ya rastê pêk tîne.

  • &
  • |
  • ^
  • ~
  • <<
  • >>

Di vê beşê de, em pêşî ravekirina jêrîn.

  • xaç(AND) :&
  • veqetandin(OR) :|
  • EXCLUSIVE-OR operasyonê(XOR) :^

Piştre, em ê li ser jêrîn nîqaş bikin.

  • Operasyonên bitwise li ser hejmarên negatîf
  • bit flip( NOT) :~
  • bit guhertin:<<,>>

Ji bo bêtir agahdarî li ser çawaniya nivîsandina jimareyên bihejmar di binary, octal, û hexadecimal de, û meriv çawa jimar û rêzikên binary, octal, û hexadecimal bi karanîna fonksiyonên jêrîn vediguhezîne, li gotara jêrîn binêre.

  • bin()
  • oct()
  • hex()
  • format()

Di heman demê de, ji bo operasyonên mantiqî (operasyonên Boolean) li ser nirxên boolean (rast, xelet) li şûna operasyonên bitwise, li gotara jêrîn binihêrin. Bikaranîn û,an li şûna &,|.

xaç(AND) :&makînevan

Ev nimûneyeke mentiqî ye Û bikaranîna & amp; operator, digel ku encam ji hêla bin() ve hatî veguheztin rêzek di navnîşana binary de.

x = 9   # 0b1001
y = 10  # 0b1010

print(x & y)
print(bin(x & y))
# 8
# 0b1000

veqetandin(OR) :|makînevan

Mînakek hilberek mentiqî (OR) bi karanîna | operator, digel ku encam ji hêla bin() ve vediguhere rêzek di navnîşana binary de û bi hev re derdixe.

print(x | y)
print(bin(x | y))
# 11
# 0b1011

EXCLUSIVE-OR operasyonê(XOR) :^makînevan

Nimûneya hilberek mentiqî (XOR) ya ku operatora ^ bikar tîne, bi encama veguheztina rêzikek di nîşana binary de bi karanîna bin() re tê hev kirin.

print(x ^ y)
print(bin(x ^ y))
# 3
# 0b11

Têkiliya di navbera ketin û derketinê de ji bo her bitek AND, OR, û XOR a mantiqî di tabloya jêrîn de tê xuyang kirin.

Ketina 1Ketina 2xaç(AND)veqetandin(OR)EXCLUSIVE-OR operasyonê(XOR)
11110
10011
01011
00000

Operasyonên bitwise li ser hejmarên negatîf

Dema ku operasyonek bitwise li ser hejmareke neyînî tê kirin, nirx wekî ku di forma temamkerê du-yê de hatî destnîşan kirin tête kirin.

Lêbelê, bala xwe bidin ku heke hûn bi karanîna bin() an format() jimareyek negatîf veguherînin rêzek binary, dê nirxa mutleq li şûna forma temamkerê duyan nîşanek kêm be.

Heke hûn dixwazin xêzek bi nûnertiya du ya temamker bistînin, wek ku li jêr tê xuyang kirin, bi hejmara herî zêde ya reqemên bit-ê yên ku hewce ne, Û bigirin.

  • Ji bo 4-bit0b1111(=0xf)
  • Ji bo 8-bit0xff
  • Ji bo 16-bit0xffff

Hûn dikarin xêzek ji nûnertiya du ya temamker bistînin (her bit tê berevajîkirin û 1 tê zêdekirin).

x = -9

print(x)
print(bin(x))
# -9
# -0b1001

print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7

bit flip:~makînevan

~nimûneya bit flipping bi operatoran.

Veguheztina bitwise ne tenê nirxa her bitek berevajîkirî ye. Nirxa vegerê dema ku vê operatorê bikar tîne wiha ye.
~x#ERROR!-(x+1)

-(x+1)Ev nirx hevwate ye ku nirxa têketinê x wekî forma temamkerê duyan were hesibandin û hemî bit berevajî bike.

Wekî ku li jor hatî behs kirin, di Python de, gava ku jimareyek negatîf bi karanîna bin(), format(), hwd, vediguhere rêzek binary, ew ne di forma temamkerê du de ye, lê di nirxa mutleq bi nîşana minusê ye. Ji ber vê yekê, veguherandina ~x-ê rasterast ji bo rêzek dê encam nede stringek ku bitsên nirxa orîjînal berevajîkirî ne.

x = 9  # 0b1001

print(~x)
print(bin(~x))
# -10
# -0b1010

Dema ku em operasyona AND-ê pêk tînin û wê vediguherînin xêzek ji du temsîla temamker, em dikarin bibînin ku bitên nirxa orîjînal berepaş in.

Wekî din, wek nimûne, ji bo bidestxistina rêzikek bit a ku 4-reqemî ye ku rêzika bit a 4-reqemî ye û wekû ye berevajîkirî ye (bitikê nîşanê ji holê rakiriye), formata() bikar bînin da ku sifirên nirxa AND-ê wekî jêrîn dagirin.04b'

print(bin(~x & 0xff))
print(format(~x & 0b1111, '04b'))
# 0b11110110
# 0110

bit guhertin:<<,>>

Nimûneyên guheztina bitê ya çepê û guheztina bitê ya rastê bi karanîna operatorên guheztina bit.

x = 9  # 0b1001

print(x << 1)
print(bin(x << 1))
# 18
# 0b10010

print(x >> 1)
print(bin(x >> 1))
# 4
# 0b100

Ji bo nirxên neyînî, bit nîşana dirêjkirin û veguhestin, û nîşana erênî / neyînî wek xwe dimîne. Nirxek neyînî wêneyek rêzek 1-an e ku heya çepê ye.

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

Çêtir e ku meriv li gorî rêzikên du bêjeyên temamker bifikire, ji ber ku fikirîna li gorî jimareyan ne zelal e.

Copied title and URL