Питхон битни оператори (логички производ, логичко ИЛИ, ексклузивно ИЛИ, инверзија, померање)

Бусинесс

Питхон обезбеђује следеће битне операторе, који изводе логичку коњункцију, логичку дисјункцију, искључиву дисјункцију, битну инверзију, померање бита улево и померање бита удесно за сваки бит бинарног целобројног типа инт вредности, респективно.

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

У овом одељку прво објашњавамо следеће.

  • раскрсница(AND) :&
  • дисјункција(OR) :|
  • ЕКСКЛУЗИВНО-ИЛИ операција(XOR) :^

Затим ћемо разговарати о следећем.

  • Побитне операције над негативним целим бројевима
  • бит флип( NOT) :~
  • померање бита:<<,>>

За више информација о томе како писати целе бројеве у бинарном, окталном и хексадецималном облику и како да конвертујете бинарне, окталне и хексадецималне бројеве и низове користећи следеће функције, погледајте следећи чланак.

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

Такође, за логичке операције (Боолеан операције) над логичким вредностима (тачно, нетачно) уместо битских операција, погледајте следећи чланак. Користите и,или уместо &амп;,|.

раскрсница(AND) :&оператер

Ово је пример логичког И који користи &амп; оператор, са резултатом конвертованим у стринг у бинарној нотацији помоћу бин().

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

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

дисјункција(OR) :|оператер

Пример логичког производа (ИЛИ) који користи | оператор, са резултатом конвертованим у стринг у бинарној нотацији помоћу бин() и излазним заједно.

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

ЕКСКЛУЗИВНО-ИЛИ операција(XOR) :^оператер

Пример логичког производа (КСОР) који користи оператор ^, комбинован са резултатом конверзије у стринг у бинарној нотацији коришћењем бин().

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

Однос између улаза и излаза за сваки бит логичког И, ИЛИ и КСОР приказан је у табели испод.

Улаз 1Улаз 2раскрсница(AND)дисјункција(OR)ЕКСКЛУЗИВНО-ИЛИ операција(XOR)
11110
10011
01011
00000

Побитне операције над негативним целим бројевима

Када се операција по биту изврши над негативним целим бројем, вредност се обрађује као да је изражена у облику комплемента два.

Имајте на уму, међутим, да ако конвертујете негативан цео број у бинарни стринг помоћу бин() или формат(), апсолутна вредност ће имати знак минус уместо формата комплемента двојке.

Ако желите да добијете стринг са комплементарном представом два, узмите И са максималним бројем потребних цифара бита, као што је приказано испод.

  • За 4-бит0b1111(=0xf)
  • За 8-бит0xff
  • За 16-битне0xffff

Можете добити низ комплементарне репрезентације два (сваки бит је обрнут и 1 се додаје).

x = -9

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

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

бит флип:~оператер

~пример окретања бита са операторима.

Побитна инверзија није само вредност сваког инвертованог бита. Повратна вредност када се користи овај оператор је следећа.
~x#ERROR!-(x+1)

-(x+1)Ова вредност је еквивалентна разматрању улазне вредности к као комплементарног облика двојке и инвертовању свих битова.

Као што је горе поменуто, у Питхон-у, када се негативан цео број конвертује у бинарни стринг помоћу бин(), формат(), итд., он није у комплементарном облику два, већ у апсолутној вредности са знаком минус. Према томе, претварање ~к директно у стринг неће резултирати стрингом са обрнутим битовима оригиналне вредности.

x = 9  # 0b1001

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

Када извршимо операцију И и претворимо је у низ комплементарне репрезентације два, можемо видети да су битови оригиналне вредности инвертовани.

Поред тога, на пример, да бисте добили низ битова који је 4-цифрени низ битова обрнут какав јесте (значни бит је изостављен), користите формат() да попуните нуле за вредност АНД на следећи начин04b'

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

померање бита:<<,>>

Примери померања бита улево и удесно коришћењем оператора померања бита.

x = 9  # 0b1001

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

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

За негативне вредности, бит предзнака се продужава и помера, а позитивни/негативни предзнак остаје исти. Негативна вредност је слика линије од 1с скроз лево.

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

Боље је размишљати у терминима низова израза комплемента два, пошто размишљање у терминима бројева није јасно.

Copied title and URL