Waendeshaji wa Python bitwise (bidhaa ya kimantiki, yenye mantiki AU, ya kipekee AU, ubadilishaji, mabadiliko)

Biashara

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

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

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 1Ingizo 2makutano(AND)mtengano(OR)Operesheni KIPEKEE-AU(XOR)
11110
10011
01011
00000

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

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

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.

Copied title and URL