Maskiranje

Maskiranje pomaže u operacijama sa bitovima. „Maska“ se koristi da bismo uključili određeni bit ili ga isključili ili samo da bismo prikupili informacije o nekom broju. Na primer, ako želimo da saznamo da li je treći bit broja „a“ sa desna uključen, to bismo najlakše postigli sa & operatorom sa maskom.
Primer:

  
#Označimo masku i dodelimo varijabli “zeljeni_broj”
a = 0b110
mask = 0b100
zeljeni_broj = a & mask
print(zeljeni_broj)
            
Kopiraj

Nakon pokretanja programa kao rezultat dobićemo:


>>  4


Korišćenje & operatora sa maskom 0b100, će isključiti sve bitove broja „a“ OSIM trećeg sa desna (tu gde je 1). Ako je rezultujući broj veći od nule, „bit“ je uključen. Ako nije veči od nule, „bit“ je isključen.

Korišćenje maske za uključivanje bitova:
Masku možemo da koristimo da uključimo bit uz pomoć „|” operatora.
Primer:

  
#želimo da uključimo prvi bit,imamo broj “a”  pa definišemo masku
a = 0b110
mask = 0b1
zeljeni_broj = a | mask
print(zeljeni_broj)

            
Kopiraj

Nakon pokretanja programa kao rezultat dobićemo:


>>  7


Objašnjenje: pošto operator OR proverava da li je uključen ili jedan ili drugi, kod prvog broja uključen je prvi, a kod drugog su uključeni drugi i treći, rezultat je da su uključeni i prvi i drugi i treći što je „0b111“, a to je: 1+2+4 = 7.

Koriščenjem XOR operatora možemo lako obrnuti bitove. Recimo da želimo da obrnemo sve bitove u broju „a“:

 

a = 0b110 
mask = 0b111
zeljeni_broj = a ^ mask
print(zeljeni_broj)

            
Kopiraj

Nakon pokretanja programa kao rezultat dobićemo:


>>  1


Objašnjenje: XOR rezultuje jedinicom ako bilo koji od brojeva na tom bitnom mestu ima 1, osim ako ga imaju oba, kada će rezultat biti 0. Broj “a” ima 0 na mestu1, 1 na mestu 2 i 1 na mestu 4. Maska ima 1 na mestima 1, 2 i 4. Rezultat će imati 1 samo na prvom bitu jer tu jedan broj ima 1 a drugiima 0, dok na ostalim poljima oba broja imaju 1.

Masku možemo koristiti i da pomeramo bitove na levo i desno. Na primer, želimo da uključimo bit koji je deseti sa desne strane. Da ne bismo kucali ceo broj (0b1000000101, što je 517), uključićemo 10-bit na broju 0b101 na sledeći način:

 
a = 0b101
mask = (0b1 << 9) # pomeramo 1 za 9 mesta, doći će na 10-ti bit s desna
zeljeni_broj = a ^ mask
print(zeljeni_broj)

            
Kopiraj

Nakon pokretanja programa kao rezultat dobićemo:


>>  517


Objašnjenje:^ je ekskluzivni OR. “Bit” će biti 1, ako je bilo koji bit 1, osim ako su oba 1. Kada smo uradili mask = (0b1 << 9), dobili smo da je mask = 0b1000000000 (= 517).
Sada imamo:

  
mask = 0b1000000000
^
a = 0b101
            

tj. rezultat je da će biti uključeni bitovi na prvom, trećem i desetom mestu.