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()
- İlgili Makaleler:Python’da ikili, sekizli ve onaltılı sayıları ve dizeleri birbirine ve birbirinden dönüştürün
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.
- İlgili Makaleler:Python’un mantıksal operatörleri ve, veya, ve değil (mantıksal bağlaç, ayrılma, olumsuzlama)
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ş 1 | Giriş 2 | kavşak(AND) | ayrılma(OR) | ÖZEL-VEYA işlem(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
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çin
0b1111
(=0xf
) - 8 bit için
0xff
- 16 bit için
0xffff
İ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
- İlgili Makaleler:Python’da ikili, sekizli ve onaltılı sayıları ve dizeleri birbirine ve birbirinden dönüştürün
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.