Binary İşlemler (bit manipülasyonları)


# Ornek : 30000 rakamının hi-byte ve low-byte olarak parçaya ayrılması ve tekrar bir araya getirilmesi.
print("hi-low byte...")
# int olarak bir değişkende 30000 turulur.
bit16_val_1 = 30000           
print(bin(bit16_val_1))       #   0111 0101 0011 0000 değerine sahiptir.
low_byte = bit16_val_1 & 0xFF # & 0000 0000 1111 1111 ile and işlemi
print(bin(low_byte))          #   0000 0000 0011 0000  sonuç 0b110000 olur.
                                
hi_byte = bit16_val_1 >> 8    #>8 0111 0101 0011 0000 değerine sağa 8 bit kaydırılır
print(bin(hi_byte))           #   0000 0000 0111 0101  sonuç 0b1110101 olur

# tekrar bir ayara getime
# kısa yazılış  (hi_byte << 8) | low_byte
bit16_val_2 = hi_byte << 8               #<8 0111 0101
print(bin(bit16_val_2))                  #   0111 0101 0000 0000  elde edilir.
bit16_val_2 = bit16_val_2 | (low_byte)   # | 0000 0000 0011 0000  low ile OR işlemine sokulur.
print(bin(bit16_val_2))                  #   0111 0101 0011 0000
print()

print("bit maskeleme...")
# Bilinmeyen binary bir değerin sacede arzu edilen kısmına müdahale etmeyi sağlar.
# Örnek 1 :  bilinen veya bilinmeyen bir bit değerinin 2. biti 1 olsun isteniyor.
# 1011 0011 referans değer olsun.
bit_val_1 = 0b10110011              #   1011 0011  ref. değer
bit_mask  = 1<<2                    # | 0000 0100  2. biti 1 olan maskemiz. 1 i iki defa sola kaydırak elde ettik.
bit_val_2 = bit_val_1 | bit_mask    #   1011 0111  elde edilir. istendiği gibi 2. bit 1 oldu.

# Örnek 2 :  bilinen veya bilinmeyen bir bit değerinin 1. biti 0 olsun isteniyor.
# 1011 0011 referans değer olsun.
bit_val_1 = 0b10110011              #   1011 0011  ref. değer (kaç bit olduğu bilinmeli...)
bit_mask  = ~(0b1<<1) & 0xFF        # & 1111 1101  1. biti 0 olan maskemiz. 1 i 1 defa sola kaydırdık 8bit için ff ile maskeledik.
bit_val_2 = bit_val_1 & bit_mask    #   1011 0001  elde edilir. istendiği gibi 1. bit 0 oldu.

# Örnek 3 :  bilinen veya bilinmeyen bir bit değerinin 5. biti 0 ise 1, 1 ise 0 olsun isteniyor.
# 1011 0011 referans değer olsun.
bit_val_1 = 0b10110011              #   1011 0011  ref. değer
bit_mask  = 1<<5                    # ^ 0010 0000  5. biti 1 olan maskemiz. 1 i 5 defa sola kaydırdık
bit_val_2 = bit_val_1 ^ bit_mask    #   1001 0011  elde edilir. istendiği gibi 5. bit 1 iken 0 oldu.

# Örnek 4 :  bilinen veya bilinmeyen bir bit değerinin 4. bitinin ne olduğu tespit edilmek isteniyor.
# 1011 0011 referans değer olsun.
bit_val_1 = 0b10110011              #   1011 0011  ref. değer
bit_val_2 = bit_val_1 >>4           #>4 0000 1011  istenen bit başa getirilir.   
bit_mask  = 1                       #&  0000 0001  0. biti 1 olan maske ayarlanır.
bit_val_3 = bit_val_2 & bit_mask    #   000  0001  elde edilir. istendiği gibi 4. bitin değeri 1 olarak tespit edilir.

Yorum Gönder

Daha yeni Daha eski