Operator bitwise Python (produk logis, logis OR, eksklusif OR, inversi, shift)

Bisnis

Python nyedhiyakake operator bitwise ing ngisor iki, sing nindakake konjungsi logis, disjunction logis, disjunction eksklusif, inversi bitwise, shift bit kiwa, lan shift bit tengen ing saben nilai integer tipe integer binar.

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

Ing bagean iki, pisanan kita nerangake ing ngisor iki.

  • prapatan(AND) :&
  • disjunction(OR) :|
  • EKSKLUSIF-UTAWA operasi(XOR) :^

Sabanjure, kita bakal ngrembug babagan ing ngisor iki.

  • Operasi bitwise ing integer negatif
  • dicokot flip( NOT) :~
  • bit shift:<<,>>

Kanggo informasi luwih lengkap babagan carane nulis integer ing biner, octal, lan heksadesimal, lan carane ngowahi biner, octal, lan heksadesimal nomer lan strings nggunakake fungsi ing ngisor iki, deleng artikel ing ngisor iki.

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

Uga, kanggo operasi logis (operasi Boolean) ing nilai boolean (bener, palsu) tinimbang operasi bitwise, deleng artikel ing ngisor iki. Gunakake lan, utawa tinimbang & amp;,|.

prapatan(AND) :&operator

Iki minangka conto lan logis lan nggunakake & amp; operator, karo asil diowahi kanggo senar ing notasi binar dening bin ().

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

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

disjunction(OR) :|operator

Conto produk logis (OR) nggunakake | operator, karo asil diowahi kanggo senar ing notasi binar dening bin () lan output bebarengan.

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

EKSKLUSIF-UTAWA operasi(XOR) :^operator

Conto produk logis (XOR) nggunakake operator ^, digabungake karo asil konversi menyang string ing notasi biner nggunakake bin ().

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

Hubungan antarane input lan output kanggo saben bit logis AND, OR, lan XOR kapacak ing tabel ing ngisor iki.

Input 1Input 2prapatan(AND)disjunction(OR)EKSKLUSIF-UTAWA operasi(XOR)
11110
10011
01011
00000

Operasi bitwise ing integer negatif

Nalika operasi bitwise dileksanakake ing integer negatif, Nilai diproses minangka yen padha ditulis ing wangun nglengkapi loro.

Elinga, yen sampeyan ngowahi integer negatif menyang string binar nggunakake bin () utawa format (), nilai absolut bakal duwe tandha minus tinimbang format pelengkap loro.

Yen sampeyan pengin entuk senar kanthi perwakilan komplemen loro, njupuk AND kanthi jumlah maksimum bit digit sing dibutuhake, kaya sing ditampilake ing ngisor iki.

  • Kanggo 4-bit0b1111(=0xf)
  • Kanggo 8-bit0xff
  • Kanggo 16-bit0xffff

Sampeyan bisa njaluk senar saka loro perwakilan nglengkapi (saben dicokot kuwalik lan 1 ditambahake).

x = -9

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

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

dicokot flip:~operator

~conto bit flipping karo operator.

Inversi bitwise ora mung nilai saben bit sing dibalik. Nilai bali nalika nggunakake operator iki minangka nderek.
~x#ERROR!-(x+1)

-(x+1)Nilai iki padha karo nimbang nilai input x minangka wangun pelengkap loro lan ngowahi kabeh bit.

Kaya kasebut ing ndhuwur, ing Python, nalika integer negatif diowahi kanggo senar binar nggunakake bin (), format (), etc., iku ora ing wangun nglengkapi loro, nanging ing Nilai Absolute karo tandha minus. Mulane, ngonversi ~x langsung menyang senar ora bakal ngasilake senar kanthi bit saka nilai asli dibalik.

x = 9  # 0b1001

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

Nalika kita nindakake operasi AND lan nguripake menyang senar saka loro perwakilan nglengkapi, kita bisa ndeleng sing bit saka Nilai asli kuwalik.

Kajaba iku, contone, kanggo njupuk string bit sing 4-digit bit string kuwalik minangka (bit tandha tilar), nggunakake format () kanggo ngisi nul kanggo nilai ANDed minangka nderek04b'

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

bit shift:<<,>>

Conto shift bit kiwa lan shift bit tengen nggunakake operator bit shift.

x = 9  # 0b1001

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

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

Kanggo nilai negatif, bit tandha ditambahi lan pindah, lan tandha positif / negatif tetep padha. Nilai negatif minangka gambar saka garis 1s ing sisih kiwa.

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

Iku luwih apik kanggo mikir ing syarat-syarat strings saka loro ekspresi pelengkap, amarga mikir bab nomer ora cetha.