Nagbibigay ang Python ng mga sumusunod na bitwise operator, na gumaganap ng logical conjunction, logical disjunction, exclusive disjunction, bitwise inversion, left bit shift, at right bit shift sa bawat bit ng binary integer type int value, ayon sa pagkakabanggit.
&
|
^
~
<<
>>
Sa seksyong ito, una naming ipaliwanag ang mga sumusunod.
- interseksyon(AND) :
&
- disjunction(OR) :
|
- EKSKLUSIBO-O operasyon(XOR) :
^
Susunod, tatalakayin natin ang mga sumusunod.
- Bitwise na operasyon sa mga negatibong integer
- kaunting pitik( NOT) :
~
- medyo shift:
<<
,>>
Para sa higit pang impormasyon sa kung paano magsulat ng mga integer sa binary, octal, at hexadecimal, at kung paano i-convert ang mga binary, octal, at hexadecimal na mga numero at string gamit ang mga sumusunod na function, tingnan ang sumusunod na artikulo.
bin()
oct()
hex()
format()
- Mga Kaugnay na Artikulo:I-convert ang binary, octal, at hexadecimal na mga numero at string papunta at mula sa isa’t isa sa Python
Gayundin, para sa mga lohikal na operasyon (Boolean operations) sa boolean values (true, false) sa halip na bitwise operations, sumangguni sa sumusunod na artikulo. Gamitin ang at, o sa halip na &,|.
- Mga Kaugnay na Artikulo:Ang mga lohikal na operator ng Python at, o, at hindi (lohikal na pagkakaugnay, disjunction, negation)
interseksyon(AND) :&operator
Ito ay isang halimbawa ng lohikal na AT gamit ang & operator, na ang resulta ay na-convert sa isang string sa binary notation ng bin().
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
disjunction(OR) :|operator
Isang halimbawa ng isang lohikal na produkto (OR) gamit ang | operator, na ang resulta ay na-convert sa isang string sa binary notation sa pamamagitan ng bin() at output nang magkasama.
print(x | y) print(bin(x | y)) # 11 # 0b1011
EKSKLUSIBO-O operasyon(XOR) :^operator
Halimbawa ng lohikal na produkto (XOR) gamit ang ^ operator, na sinamahan ng resulta ng conversion sa isang string sa binary notation gamit ang bin().
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
Ang ugnayan sa pagitan ng input at output para sa bawat bit ng lohikal na AND, OR, at XOR ay ipinapakita sa talahanayan sa ibaba.
Input 1 | Input 2 | interseksyon(AND) | disjunction(OR) | EKSKLUSIBO-O operasyon(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
Bitwise na operasyon sa mga negatibong integer
Kapag ang isang bitwise na operasyon ay isinagawa sa isang negatibong integer, ang halaga ay pinoproseso na parang ito ay ipinahayag sa form na pandagdag ng dalawa.
Tandaan, gayunpaman, na kung iko-convert mo ang isang negatibong integer sa isang binary string gamit ang bin() o format(), ang absolute value ay magkakaroon ng minus sign sa halip na isang format ng complement ng dalawa.
Kung gusto mong makakuha ng isang string na may representasyon ng complement ng dalawa, kumuha ng AT na may pinakamataas na bilang ng mga bit digit na kinakailangan, tulad ng ipinapakita sa ibaba.
- Para sa 4-bit
0b1111
(=0xf
) - Para sa 8-bit
0xff
- Para sa 16-bit
0xffff
Maaari kang makakuha ng isang string ng representasyong pandagdag ng dalawa (bawat bit ay baligtad at 1 ay idinagdag).
x = -9 print(x) print(bin(x)) # -9 # -0b1001 print(bin(x & 0xff)) print(format(x & 0xffff, 'x')) # 0b11110111 # fff7
- Mga Kaugnay na Artikulo:I-convert ang binary, octal, at hexadecimal na mga numero at string papunta at mula sa isa’t isa sa Python
kaunting pitik:~operator
~halimbawa ng bit flipping sa mga operator.
Ang bitwise inversion ay hindi lamang ang halaga ng bawat bit inverted. Ang return value kapag ginagamit ang operator na ito ay ang mga sumusunod.~x
#ERROR!-(x+1)
-(x+1)
Ang halagang ito ay katumbas ng pagsasaalang-alang sa halaga ng input x bilang isang form na pandagdag ng dalawa at pag-invert ng lahat ng mga bit.
Tulad ng nabanggit sa itaas, sa Python, kapag ang isang negatibong integer ay na-convert sa isang binary string gamit ang bin(), format(), atbp., ito ay wala sa form ng complement ng dalawa, ngunit nasa ganap na halaga na may minus sign. Samakatuwid, ang direktang pag-convert ng ~x sa isang string ay hindi magreresulta sa isang string na ang mga piraso ng orihinal na halaga ay nabaligtad.
x = 9 # 0b1001 print(~x) print(bin(~x)) # -10 # -0b1010
Kapag ginawa natin ang operasyong AND at ginawa itong isang string ng representasyon ng complement ng dalawa, makikita natin na ang mga bit ng orihinal na halaga ay baligtad.
Bilang karagdagan, halimbawa, upang makakuha ng isang bit string na isang 4-digit na bit string na inverted as is (sign bit omitted), gamitin ang format() upang punan ang mga zero para sa ANDed value gaya ng sumusunod04b'
print(bin(~x & 0xff)) print(format(~x & 0b1111, '04b')) # 0b11110110 # 0110
medyo shift:<<,>>
Mga halimbawa ng left bit shift at right bit shift gamit ang bit shift operator.
x = 9 # 0b1001 print(x << 1) print(bin(x << 1)) # 18 # 0b10010 print(x >> 1) print(bin(x >> 1)) # 4 # 0b100
Para sa mga negatibong halaga, ang sign bit ay pinahaba at inililipat, at ang positibo/negatibong sign ay nananatiling pareho. Ang negatibong value ay isang imahe ng isang linya ng 1s hanggang sa kaliwa.
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
Ito ay mas mahusay na mag-isip sa mga tuntunin ng mga string ng dalawang’s complement expression, dahil ang pag-iisip sa mga tuntunin ng mga numero ay hindi malinaw.