Bitski operatori

Bitski operatori su operatori za manipulisanje bitovima. Oni operišu na brojevima, ali taj broj ne tretiraju kao pojedinu vrednost nego ga tretiraju kao string bitova, napisan u 2n-ti formatu (tzv.: two’s-complement binary). Ovaj vid zapisa je isti kao i klasična binarna reprezentacija brojeva za pozitivne vrednosti, ali je malo drugačija za negativne vrednosti (što nećemo obrađivati).


Bitski operatori operišu sa bitovima. U svakom računaru, brojevi su prikazani bitovima tj. serijom nula i jedinica..

& Bitsko AND
| Bitsko OR
^ Bitsko XOR
<< Bitsko pomeranje u levo
>> Bitsko pomeranje u desno
~ Bitsko NOT(jedinični komplement)


Tako da nam sledeće operacije daju na prvi pogled čudne rezultate:

print(5 >> 4)
print(5 << 1)
print(8 & 5)
print(9 | 4)
print(12 ^ 42)
print(~88)
Kopiraj

Nakon pokretanja programa kao rezultat dobićemo:


>>  0

>>  10

>>  0

>>  13

>>  8

>>  -89



Kada mi brojimo, brojimo sa osnovom 10. To znači da svako mesto u broju može da sadrži jednu od deset cifara od 0 do 9. Kada brojimo binarno, brojimo sa osnovom 2 tj. svako mesto u broju može biti ili 0 ili 1. U binarnom sistemu svako mesto predstavlja stepen od 2. Tako, bit koji se nalazi krajnje desno je 2 na nulti stepen tj. 1’s bit (one’s bit)– bit jedinice – sledeći je 2’s bit (two’s bit), pa 4, 8, 16, 31 i tako dalje. Znači svako mesto u broju, gledano s’desna je: 2 na 0, 2 na 1, 2 na 2, 2 na 3, 2 na 4 itd…

Primer:

Broj “1010” je u binarnom sistemu 10, jer su 2’s i 8’s bitovi “uključeni”, tj:


8`s bit 4`s bit 2`s bit 1`s bit
1 0 1 0
8 + 0 + 2 + 0 =10

S desna na levo:
0 jedinica, 1 dvojka, 0 četvorki, jedna 8
Sledi: 2+8 = 10. „1010“ u binarnom a 10 u dekadnom sistemu.


U Pajtonu, brojevi u binarnom formatu se pišu tako što se na početku doda „0b“ (nula i b).
Prema tome:
0b1 = 1
0b10 = 2
0b11 = 3
0b100 = 4
0b101 = 5
0b110 = 6
0b111 = 7


Sada možemo čak i da sabiramo ovako napisano brojeve:
0b1 + 0b11 = 4 (1 + 3)
0b11 * 0b11 = 9 (3*3)

Vežba:
jedan = 0b1
dva = 0b10
tri = 0b11
cetiri = 0b100
pet = 0b101
sest = 0b110
sedam = 0b111
osam = 0b1000
devet = 0b1001
deset = 0b1010
jedanaest = 0b1011
dvanaest = 0b1100


Pajton ima ugradjenu funkciju koja nam može pomoći u bitskim operacijama. To je bin()funcija. Ova funkcija uzima integer (celobrojnu vrednost) kao input, i vraća binarnu reprezentaciju broja u string obliku.Takođe, možemo koristiti i funkcije oct() i hex() za osnove 8 i 16. Pored toga, funkcija int(), nam služi i da pretvorimo podatak koji nije broj u integer, tj. u celobrojnu vrednost, na primer:


print(int("42"))
Kopiraj

Nakon pokretanja programa kao rezultat dobićemo:


>>  42


U Pajtonu, stringovi se označavaju sa "", tako da u ovom primeru „42“ nije broj 42, već string 42. Funkcijom int() ga možemo konvertovati u broj. Međutim, ova funkcija može uzeti i drugi, opcioni argumet. Tako ako joj prosledimo neki broj i osnovu u kojoj je taj broj iskazan, funkcija će nam vratiti vrednost tog broja u osnovi 10 (dekadnom sistemu). Na pimer:

print(int("1010", 2))
print(int("0b100",2))
print(int("100",2))
Kopiraj

Nakon pokretanja programa kao rezultat dobićemo:


>>  10

>>  4

>>  4


Pritom je nebitno da li pišemo int("0b100",2) ili int("100",2), rezultat je 4.

Vežba:

print(int("1",2))
print(int("10",2))
print(int("111",2))
print(int("0b100",2))
print(int(bin(5),2))
Kopiraj

Nakon pokretanja programa kao rezultat dobićemo:


>>  1

>>  2

>>  7

>>  4

>>  5