Operacije nad bitovima u JavaScriptu

Operacije nad bitovima su dobro poznate programerima koji rade u jezicima nižeg nivoa. Ipak, implementacije određenih algoritama, kao i rad sa grafikom mogu zahtevati rad sa bitovima.

Operandi su uvek 32-bitni označeni celi brojevi. Ako se zada racionalni broj, on se konvertuje u celi broj otkidanjem decimala (znači, ne koristi se matematičko zaokruživanje). Ako se zada tekst, znakovi se neće konvertovati u bajtove, već će imati vrednost 0.

U tabeli je dat spisak operacija nad bitovima koje su podržane u JavaScript-u.

OperatorPrimerAsocijativnost
Negacija bitova~xulevo
Šiftovanje ulevox<<yudesno
Šiftovanje udesno sa pamćenjem znakax>>yudesno
Šiftovanje udesnox>>>yudesno
AND nad bitovimax&yudesno
XOR nad bitovimax^yudesno
OR nad bitovimax|yudesno

Negacija bitova

Ovo je jedina unarna operacija nad bitovima. Istovremeno je i najjača, odnosno, ako ne koristimo zagrade, uvek će najpre da se izvrše sve negacije u izrazu, pa tek onda ostale operacije.

Operacija je jednostavna - svaki bit u broju se "obrće". To znači da jedinice postaju nule, a nule, jedinice.

A00101001
~A11010110

Šiftovanje

Šiftovanje predstavlja pomeranje bitova ulevo ili udesno. Kod ovakvih operacija, potrebno je uvek imati u vidu šta se dešava sa bitovima koji "ispadnu" i kako se definišu novi bitovi koji se pojavljuju.

Prvi operan de broj nad kojim se vrši premeštanje bitova, a drugi operand je ofset (pomeraj), odnosno za koliko bitova se vrši pomeranje.

Bitovi koji "ispadnu" se, kod svih operacija šiftovanja, zanemaruju. Ovo je suprotno od operacije rotacije bitova kod koje se "otpali" bitovi pojavljuju sa druge strane. Operacija rotacije bitova ne postoji u JavaScriptu.

Šiftovanje ulevo

Pri šiftovanju ulevo se bitovi pomeraju prema "jačim" pozicijama, tj. ulevo. Mesta koja ostanu upražnjena sa desne strane, popunjavaju se nulama.

A10101011
A<<101010110

Šiftovanje udesno sa pamćenjem znaka

Pri šiftovanju udesno, bitovi se "spuštaju" naniže, tj. udesno. Novi bitovi sa leve strane su jednaki krajnjem levom bitu originalnog broja.

Zbog toga se ovo zove šiftovanje sa pamćenjem znaka - kod označenih celih brojeva, brojevi koji imaju setovan najviši bit su uvek negativni, dok su brojevi kojima je najviši bit jednak nuli, pozitivni. Ako se ovaj bit nikada ne menja, neće se menjati ni znak broja.

A 10101110
A>>2 11101011

Šiftovanje udesno

Obično šiftovanje udesno, bitove "spušta" naniže, a prazna mesta sa leve strane popunjavaju se nulama.

Ova operacija praktično predstavlja celobrojno deljenje sa dva za svaki bit "pomaka".

A 10101110
A>>>2 00101011

AND-ovanje

Ova operacija se obavlja kao logička konjukcija ali "bit-na-bit". Drugim rečima, operacija povezuje bitove dva broja. Za svaki bit prvog broja gleda se odgovarajući bit drugog broja. Rezultat se dobija prema poznatom logičkom pravilu:

aba & b
000
010
100
111

Kao što vidimo, rezultujući bit će biti setovan samo ako su oba bitova jedinice. Da pogledamo primer:

A10111011
B11100110
A&B10100010

OR-ovanje

Operacija "ILI" se obavlja kao logička disjunkcija nad bitovima dva broja. Tablica tautologije je sledeća:

aba | b
000
011
101
111

Dakle, rezultujući bit će biti setovan ako je makar jedan od bitova jedinica. Da pogledamo primer:

A10011001
B11001010
A|B11011011

XOR-ovanje

Kod operacije "ekskluzivno ILI" drugi operand praktično predstavlja "semafor" prema kome se dobija rezultat na osnovu prvog broja. Pogledajmo pravilo:

aba ^ b
000
011
101
110

Dakle, rezultujući bit će biti jedinica ako su bitovi različiti, a nula ako su isti. Može da se posmatra i na sledeći način: "svaka jedinica bita b, obrće bit a, dok ga nula ne menja".

A10011001
B11001010
A^B01010011

Primer


  var x = 12;
  var x1 = x << 2;  // šiftovanje ulevo za dva bita - efektivno kao množenje sa 4
	
Svi elementi sajta Web'n'Study, osim onih za koje je navedeno da su u javnom vlasništvu, vlasništvo su autora i ne smeju se koristiti, u celosti ili delimično bez pismenog odobrenja autora. To uključuje tekstove, slike, ilustracije, animacije, prateći grafički materijal i programski kod.
Ovaj sajt koristi tehnologiju kolačića (cookies). Detaljnije o tome možete pročitati u tekstu o našoj politici privatnosti.