Python битийн операторууд (логик бүтээгдэхүүн, логик OR, онцгой OR, урвуу, шилжилт)

Бизнес эрхэлдэг

Python нь дараах битийн операторуудыг хангадаг бөгөөд эдгээр нь хоёртын бүхэл төрлийн int утгын бит тус бүр дээр логик холболт, логик салгах, онцгой дизьюнкц, битийн урвуу, зүүн битийн шилжилт, баруун битийн шилжилтийг гүйцэтгэдэг.

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

Энэ хэсэгт бид эхлээд дараах зүйлийг тайлбарлах болно.

  • уулзвар(AND) :&
  • салгах(OR) :|
  • ОНЦГОЙ-ЭСВЭЛ үйл ажиллагаа(XOR) :^

Дараа нь бид дараахь зүйлийг хэлэлцэх болно.

  • Сөрөг бүхэл тоон дээрх битийн үйлдлүүд
  • жаахан эргүүлэх( NOT) :~
  • бит шилжилт:<<,>>

Бүхэл тоог хоёртын, наймтын, арван зургаант тооллын системд хэрхэн бичих, хоёртын, наймтын, арван зургаатын тоо, мөрийг хэрхэн хөрвүүлэх талаар дараах функцуудыг ашиглан дэлгэрэнгүй мэдээллийг дараах нийтлэлээс үзнэ үү.

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

Мөн битийн үйлдлүүдийн оронд логик үйлдлүүдийг (Боолийн үйлдлүүд) логик үйлдлүүдийг (үнэн, худал) дараах нийтлэлээс үзнэ үү. &,|-ийн оронд ба,эсвэл ашиглана уу.

уулзвар(AND) :&оператор

Энэ нь логик БА ашиглах жишээ юм & AMP; оператор, үр дүнг bin() ашиглан хоёртын тэмдэглэгээнд мөр болгон хөрвүүлсэн.

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

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

салгах(OR) :|оператор

|-г ашиглан логик бүтээгдэхүүний (OR) жишээ оператор, үр дүнг bin()-ээр хоёртын тэмдэглэгээнд мөр болгон хувиргаж, хамтдаа гаргана.

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

ОНЦГОЙ-ЭСВЭЛ үйл ажиллагаа(XOR) :^оператор

Bin() ашиглан хоёртын тэмдэглэгээнд мөр болгон хөрвүүлсэн үр дүнтэй хослуулсан ^ операторыг ашигласан логик бүтээгдэхүүний (XOR) жишээ.

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

Логик AND, OR, XOR бит бүрийн оролт ба гаралтын хоорондын хамаарлыг доорх хүснэгтэд үзүүлэв.

Оролт 1Оролт 2уулзвар(AND)салгах(OR)ОНЦГОЙ-ЭСВЭЛ үйл ажиллагаа(XOR)
11110
10011
01011
00000

Сөрөг бүхэл тоон дээрх битийн үйлдлүүд

Сөрөг бүхэл тоон дээр битийн үйлдлийг гүйцэтгэхэд утгыг хоёр нөхөх хэлбэрээр илэрхийлсэн мэт боловсруулдаг.

Гэхдээ хэрэв та bin() эсвэл format() ашиглан сөрөг бүхэл тоог хоёртын мөр болгон хөрвүүлбэл үнэмлэхүй утга нь хоёрын нөхөх форматын оронд хасах тэмдэгтэй байх болно гэдгийг анхаарна уу.

Хэрэв та хоёрын нөхөх илэрхийлэлтэй тэмдэгт мөр авахыг хүсвэл доор үзүүлсэн шиг AND-г хамгийн ихдээ шаардлагатай бит цифрээр авна уу.

  • 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)Энэ утга нь оролтын утгыг х-г хоёрын нөхөх хэлбэр гэж үзэж, бүх битийг урвуу оруулсантай тэнцэнэ.

Дээр дурдсанчлан Python-д сөрөг бүхэл тоог bin(), format() гэх мэтийг ашиглан хоёртын тэмдэгт мөр болгон хөрвүүлэхдээ хоёрын нөхөх хэлбэрээр биш харин хасах тэмдэгтэй үнэмлэхүй утгаараа байна. Иймээс ~x-г шууд мөр болгон хөрвүүлснээр анхны утгын битүүд урвуулагдсан стринг үүсэхгүй.

x = 9  # 0b1001

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

Бид AND үйлдлийг хийж, хоёрын нөхөх дүрслэлийн мөр болгон хувиргахад анхны утгын битүүд урвуу байгааг харж болно.

Нэмж дурдахад, жишээлбэл, 4 оронтой битийн мөрийг урвуу байдлаар нь (тэмдэг бит орхигдуулсан) авахын тулд format()-г ашиглан ANDed утгын тэгийг дараах байдлаар бөглөнө үү.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

Тоогоор сэтгэх нь тодорхойгүй тул хоёрын нөхөх илэрхийлэлийн утсаар бодох нь дээр.

Copied title and URL