Python bitsel operatörler (mantıksal ürün, mantıksal VEYA, özel VEYA, ters çevirme, kaydırma)

Python, bir ikili tamsayı türü int değerinin her bitinde sırasıyla mantıksal bağlaç, mantıksal ayırma, özel ayırma, bit düzeyinde ters çevirme, sola bit kaydırma ve sağa bit kaydırma gerçekleştiren aşağıdaki bit düzeyinde operatörleri sağlar.

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

Bu bölümde, önce aşağıdakileri açıklıyoruz.

  • kavşak(AND) :&
  • ayrılma(OR) :|
  • ÖZEL-VEYA işlem(XOR) :^

Ardından, aşağıdakileri tartışacağız.

  • Negatif tamsayılarda bitsel işlemler
  • biraz çevirme( NOT) :~
  • bit kaydırma:<<,>>

Tam sayıların ikili, sekizli ve onaltılı olarak nasıl yazılacağı ve aşağıdaki işlevleri kullanarak ikili, sekizli ve onaltılık sayıların ve dizelerin nasıl dönüştürüleceği hakkında daha fazla bilgi için aşağıdaki makaleye bakın.

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

Ayrıca, bitsel işlemler yerine boole değerleri (true, false) üzerindeki mantıksal işlemler (Boole işlemleri) için aşağıdaki makaleye bakın. &,| yerine and,veya kullanın.

kavşak(AND) :&Şebeke

Bu, & operatör, sonuç bin() tarafından ikili gösterimde bir dizgeye dönüştürülür.

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

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

ayrılma(OR) :|Şebeke

| öğesini kullanan bir mantıksal ürün (VEYA) örneği operatör, sonuç bin() ile ikili gösterimde bir dizgeye dönüştürülür ve birlikte çıkarılır.

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

ÖZEL-VEYA işlem(XOR) :^Şebeke

^ operatörünü kullanan bir mantıksal ürün (XOR) örneği, bin() kullanılarak ikili gösterimde bir dizgeye dönüştürmenin sonucuyla birleştirildi.

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

Her mantıksal AND, OR ve XOR biti için giriş ve çıkış arasındaki ilişki aşağıdaki tabloda gösterilmektedir.

Giriş 1Giriş 2kavşak(AND)ayrılma(OR)ÖZEL-VEYA işlem(XOR)
11110
10011
01011
00000

Negatif tamsayılarda bitsel işlemler

Negatif bir tamsayı üzerinde bit düzeyinde bir işlem gerçekleştirildiğinde, değer, ikiye tümleyen biçiminde ifade edilmiş gibi işlenir.

Ancak, bin() veya format() kullanarak negatif bir tamsayıyı ikili dizeye dönüştürürseniz, mutlak değerin ikinin tümleyen biçimi yerine eksi işareti olacağını unutmayın.

İkinin tümleyen temsili olan bir dize elde etmek istiyorsanız, aşağıda gösterildiği gibi, gereken maksimum bit basamak sayısıyla VE’yi alın.

  • 4 bit için0b1111(=0xf)
  • 8 bit için0xff
  • 16 bit için0xffff

İkinin tümleyen temsilinden oluşan bir dize elde edebilirsiniz (her bit ters çevrilir ve 1 eklenir).

x = -9

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

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

biraz çevirme:~Şebeke

~işlemcilerle bit çevirme örneği.

Bit düzeyinde tersine çevirme, yalnızca tersine çevrilmiş her bitin değeri değildir. Bu operatörü kullanırken dönüş değeri aşağıdaki gibidir.
~x#ERROR!-(x+1)

-(x+1)Bu değer, x girdi değerini ikinin tümleyen formu olarak kabul etmeye ve tüm bitleri tersine çevirmeye eşdeğerdir.

Yukarıda bahsedildiği gibi Python’da negatif bir tamsayı bin(), format() vb. Bu nedenle, ~x’i doğrudan bir dizgeye dönüştürmek, orijinal değerin bitleri ters çevrilmiş bir dizge ile sonuçlanmaz.

x = 9  # 0b1001

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

AND işlemini gerçekleştirip ikinin tümleyen gösteriminin bir dizisine çevirdiğimizde, orijinal değerin bitlerinin ters çevrildiğini görebiliriz.

Ek olarak, örneğin, olduğu gibi (işaret biti atlanmış) 4 basamaklı bir bit dizisi olan bir bit dizisi elde etmek için, ANDed değeri için sıfırları doldurmak için format() kullanın.04b'

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

bit kaydırma:<<,>>

Bit kaydırma operatörlerini kullanarak sol bit kaydırma ve sağ bit kaydırma örnekleri.

x = 9  # 0b1001

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

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

Negatif değerler için, işaret biti uzatılır ve kaydırılır ve pozitif/negatif işaret aynı kalır. Negatif bir değer, tamamen sola doğru 1 saniyelik bir çizginin görüntüsüdür.

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

Sayılarla düşünmek net olmadığından, ikinin tümleyen ifadelerinin dizeleri cinsinden düşünmek daha iyidir.

Copied title and URL