Питхон обезбеђује следеће битне операторе, који изводе логичку коњункцију, логичку дисјункцију, искључиву дисјункцију, битну инверзију, померање бита улево и померање бита удесно за сваки бит бинарног целобројног типа инт вредности, респективно.
&
|
^
~
<<
>>
У овом одељку прво објашњавамо следеће.
- раскрсница(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) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
Побитне операције над негативним целим бројевима
Када се операција по биту изврши над негативним целим бројем, вредност се обрађује као да је изражена у облику комплемента два.
Имајте на уму, међутим, да ако конвертујете негативан цео број у бинарни стринг помоћу бин() или формат(), апсолутна вредност ће имати знак минус уместо формата комплемента двојке.
Ако желите да добијете стринг са комплементарном представом два, узмите И са максималним бројем потребних цифара бита, као што је приказано испод.
- За 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
Боље је размишљати у терминима низова израза комплемента два, пошто размишљање у терминима бројева није јасно.