Python hutoa waendeshaji wafuatao wenye busara kidogo, ambao hufanya muunganisho wa kimantiki, mtengano wa kimantiki, mtengano wa kipekee, ubadilishaji wa njia kidogo, kuhama kidogo kidogo, na mabadiliko ya biti kulia kwa kila biti ya aina ya nambari kamili ya nambari ya int, mtawalia.
&
|
^
~
<<
>>
Katika sehemu hii, kwanza tunaelezea yafuatayo.
- makutano(AND) :
&
- mtengano(OR) :
|
- Operesheni KIPEKEE-AU(XOR) :
^
Ifuatayo, tutajadili yafuatayo.
- Operesheni Bitwise kwenye nambari hasi
- pindua kidogo( NOT) :
~
- mabadiliko kidogo:
<<
,>>
Kwa maelezo zaidi kuhusu jinsi ya kuandika nambari kamili katika mfumo wa binary, oktal, na hexadesimoli, na jinsi ya kubadilisha nambari na mifuatano ya binary, octal, na heksadesimali kwa kutumia vipengele vifuatavyo, angalia makala ifuatayo.
bin()
oct()
hex()
format()
- Nakala Zinazohusiana:Badilisha nambari za binary, octal, na heksadesimali na kamba kwenda na kutoka kwa kila mmoja katika Python
Pia, kwa utendakazi wa kimantiki (operesheni za Boolean) kwenye maadili ya boolean (kweli, uongo) badala ya uendeshaji wa busara kidogo, rejelea makala ifuatayo. Tumia na, au badala ya &,|.
- Nakala Zinazohusiana:Waendeshaji kimantiki wa Python na, au, na si (kiunganishi cha kimantiki, mgawanyiko, kukanusha)
makutano(AND) :&mwendeshaji
Huu ni mfano wa kimantiki NA kutumia & operator, na matokeo yake yamebadilishwa kuwa kamba katika nukuu ya binary na bin().
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
mtengano(OR) :|mwendeshaji
Mfano wa bidhaa ya kimantiki (AU) kwa kutumia | operator, na matokeo yake yakibadilishwa kuwa kamba katika nukuu ya binary na bin() na matokeo pamoja.
print(x | y) print(bin(x | y)) # 11 # 0b1011
Operesheni KIPEKEE-AU(XOR) :^mwendeshaji
Mfano wa bidhaa ya kimantiki (XOR) inayotumia opereta ^, pamoja na tokeo la ubadilishaji kuwa mfuatano katika nukuu ya binary kwa kutumia bin().
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
Uhusiano kati ya ingizo na pato kwa kila biti ya kimantiki NA, AU, na XOR umeonyeshwa kwenye jedwali lililo hapa chini.
Ingizo 1 | Ingizo 2 | makutano(AND) | mtengano(OR) | Operesheni KIPEKEE-AU(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
Operesheni Bitwise kwenye nambari hasi
Operesheni yenye busara kidogo inapofanywa kwa nambari hasi, thamani huchakatwa kana kwamba imeonyeshwa katika fomu ya kukamilisha mbili.
Kumbuka, hata hivyo, kwamba ukibadilisha nambari hasi kuwa mfuatano wa binary kwa kutumia bin() au umbizo(), thamani kamili itakuwa na ishara ya kuondoa badala ya umbizo kamilishano la mbili.
Iwapo ungependa kupata mfuatano wenye uwakilishi kamilishano wa mbili, chukua NA pamoja na idadi ya juu zaidi ya tarakimu biti inayohitajika, kama inavyoonyeshwa hapa chini.
- Kwa 4-bit
0b1111
(=0xf
) - Kwa 8-bit
0xff
- Kwa 16-bit
0xffff
Unaweza kupata safu ya uwakilishi wa sehemu mbili (kila biti imegeuzwa na 1 inaongezwa).
x = -9 print(x) print(bin(x)) # -9 # -0b1001 print(bin(x & 0xff)) print(format(x & 0xffff, 'x')) # 0b11110111 # fff7
- Nakala Zinazohusiana:Badilisha nambari za binary, octal, na heksadesimali na kamba kwenda na kutoka kwa kila mmoja katika Python
pindua kidogo:~mwendeshaji
~example of bit flipping na waendeshaji.
Ugeuzaji wa bitwise sio tu thamani ya kila biti iliyogeuzwa. Thamani ya kurudi unapotumia opereta huyu ni kama ifuatavyo.~x
#ERROR!-(x+1)
-(x+1)
Thamani hii ni sawa na kuzingatia thamani ya ingizo x kama fomu inayosaidia ya mbili na kubadilisha biti zote.
Kama ilivyoelezwa hapo juu, katika Python, nambari hasi inapobadilishwa kuwa kamba ya binary kwa kutumia bin(), umbizo (), n.k., haiko katika umbo la kukamilisha mbili, lakini kwa thamani kamili na ishara ya kuondoa. Kwa hivyo, kugeuza ~x moja kwa moja kuwa kamba hakutasababisha kamba iliyo na vijiti vya thamani asili vilivyogeuzwa.
x = 9 # 0b1001 print(~x) print(bin(~x)) # -10 # -0b1010
Tunapofanya operesheni ya AND na kuigeuza kuwa mfuatano wa uwakilishi wa sehemu mbili, tunaweza kuona kwamba biti za thamani asili zimegeuzwa.
Kwa kuongezea, kwa mfano, kupata mfuatano mdogo ambao ni mfuatano wa tarakimu 4 uliogeuzwa kama ilivyo ( ishara imeachwa), tumia umbizo () kujaza sufuri kwa thamani ya ANDed kama ifuatavyo.04b'
print(bin(~x & 0xff)) print(format(~x & 0b1111, '04b')) # 0b11110110 # 0110
mabadiliko kidogo:<<,>>
Mifano ya zamu ya biti ya kushoto na zamu ya biti kulia kwa kutumia viendeshaji vya shifti kidogo.
x = 9 # 0b1001 print(x << 1) print(bin(x << 1)) # 18 # 0b10010 print(x >> 1) print(bin(x >> 1)) # 4 # 0b100
Kwa maadili hasi, biti ya ishara hupanuliwa na kubadilishwa, na ishara chanya/hasi inabakia sawa. Thamani hasi ni taswira ya mstari wa 1 kuelekea kushoto.
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
Ni bora kufikiria kwa masharti ya misemo inayosaidia ya mbili, kwani kufikiria kwa nambari sio wazi.