# 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.