Bitni operatori su prikladni za korištenje i mogu rezultirati munjevito brzim kodom. Saznajte što su i kako ih koristiti.
Bitovi operatori su oni koji djeluju na binarnoj razini. Često se vrlo brzo izvršavaju i obično djeluju na dva operanda.
Možete koristiti bitovne operatore za manipulaciju binarnim brojevima, optimiziranje koda, komprimiranje podataka i implementaciju tehnika za programiranje grafike ili igara. Kao i većina drugih programskih jezika, JavaScript ima izvrsnu podršku za bitovne operacije.
Što su operateri?
Većina programskih jezika koristi koncept "operatora"—simbol koji govori tumaču da izvrši određenu matematičku, relacijsku ili logičku operaciju.
Ima ih mnogo različite vrste JavaScript operatora kojih biste trebali biti svjesni, od onih koji izgledaju kao standardni matematički operatori, poput "+", do operatora koji uspoređuju dvije vrijednosti. Bitovi operatori poseban su skup koji se bavi binarnim brojevima.
Operator AND (&) po bitovima
JavaScript po bitovima I (&) operator uspoređuje odgovarajuće bitove od dva
binarni operandi—brojevi koji sadrže samo 0 i 1. Za svaki par ulaznih bitova, odgovarajući izlazni bit je "1" ako su oba ulazna bita "1" ili "0" u suprotnom.Evo sintakse operatora AND po bitovima:
a & b
U ovom primjeru, a i b su operandi na kojima izvodite bitnu operaciju.
Evo kako funkcionira operator AND po bitovima:
- Operacija AND primjenjuje se na svaki par odgovarajućih bitova u a i b s desna na lijevo.
- Ako su oba bita 1, rezultat je 1. Ako je bilo koji bit 0, rezultat je 0.
- Rezultat je novi broj gdje svaki bit predstavlja rezultat operacije AND na odgovarajućim bitovima a i b.
Na primjer:
neka a = 50; // 00110010
neka b = 100; // 01100100neka rezultat = a & b; // 00100000
konzola.log (rezultat); // 32
U gornjem primjeru, a je 50 u decimali, što je ekvivalentno binarnom broju 00110010, i b je 100 u decimali, što je ekvivalentno binarnom broju 01100100. Operator AND uspoređuje svaki par odgovarajućih bitova s desna na lijevo i proizvodi rezultirajući binarni broj 00100000, što je 32 u decimali.
Bitni operator ILI (|).
Bitno ILI (|) uspoređuje odgovarajuće bitove dva operanda i vraća "1" ako su jedan ili oba bita "1" i "0" ako su oba bita "0".
Evo sintakse bit-wise OR operatora:
a | b
Gdje a i b su operandi operacije.
Bitni operator OR (|) radi na isti način kao i bitni operator AND. Jedina razlika je što operator OR vraća "1" ako je "bilo koji" od bita "1" i "0" ako su "oba" bita "0".
Na primjer:
neka a = 50; // 00110010
neka b = 100; // 01100100neka rezultat = a | b; // 01110110
konzola.log (rezultat); // 118
U gornjem primjeru, operator ILI po bitovima uspoređuje svaki par bitova s desna na lijevo (tj. 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, i tako dalje). Rezultirajući binarni broj je 01110110, što je 118 u decimali.
Bitni XOR (^) operator
Bitni XOR (^) uspoređuje odgovarajuće bitove dvaju operanda i vraća "1" ako je jedan od operanda, ali ne i oba, "1" i "0" ako su oba operanda "1" ili "0".
Evo sintakse XOR operatora po bitovima:
a ^ b
Gdje a i b su operandi operacije.
Operator XOR po bitovima funkcionira na isti način kao operatori OR i AND po bitovima. Jedina razlika je u tome što vraća "1" ako je "bilo, ali ne oba" od operanda "1" i "0" ako su "oba" operanda "1" ili "0".
Na primjer:
neka a = 50; // 00110010
neka b = 100; // 01100100neka rezultat = a ^ b; // 01010110
konzola.log (rezultat); // 86
U gornjem primjeru, operator XOR uspoređuje svaki par bitova s desna na lijevo (tj. 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, i tako dalje). Rezultirajući binarni broj je 01010110, što je 86 u decimali.
Bitno NOT (~) operator
Bitno NOT (~) operator je unarni operator koji radi s jednim cijelim brojem invertirajući sve njegove bitove. Drugim riječima, mijenja svaki bit "0" u "1" i svaki bit "1" u "0".
Evo sintakse NOT operatora po bitovima:
~c
Gdje c je operand.
Operator NE radi po bitovima invertirajući sve bitove operanda, uključujući bitove predznaka.
Na primjer:
neka c = 10; // 00001010
neka d = -10; // 11110110
konzola.log(~c); // 11110101
konzola.log(~d); // 00001001
U gornjem primjeru, operator NOT invertira sve bitove (tj. 0 → 1, 1 → 0, itd.), uključujući bitove predznaka.
Lijevi pomak (<
Operator pomaka ulijevo pomiče bitove zadanog broja ulijevo. Operator uzima dva operanda: broj za pomak i broj bitova za pomak.
Evo sintakse za operator lijevog pomaka:
a << b
Gdje a je operand za operator lijevog pomaka, i b je broj bitova za koje će operator pomaknuti operand.
Operator pomaka ulijevo radi pomicanjem svakog bita operanda ulijevo za određeni broj pozicija i odbacivanjem viška bitova pomaknutih ulijevo.
Na primjer:
neka a = 50; // 00110010
neka b = 2;neka rezultat = a << b; // 11001000
konzola.log (rezultat); // 200
U gornjem primjeru, operator lijevog pomaka pomaknuo je decimalni broj 50 binarnog 00110010 za dva mjesta. Rezultirajuća binarna vrijednost je 11001000, što je 200 kao decimalni broj.
Operator desnog pomaka (>>) za širenje znakova
Desni pomak koji širi znak (>>) pomiče bitove broja udesno zadržavajući predznak izvornog broja. Operator uzima dva operanda: broj za pomak i broj bitova za pomak.
Evo sintakse za operator desnog pomaka koji širi znak:
a >> b
Gdje a je operand za desni operator pomaka, i b je broj bitova za koje će operator pomaknuti operand.
Operator desnog pomaka koji širi znak radi slično kao i operator pomaka ulijevo; jedina razlika u načinu rada je u tome što desni pomak održava predznak.
Na primjer:
neka a = -50; // 11001110
neka b = 2;neka rezultat = a >> b; // 11110011
konzola.log (rezultat); // -13
U gornjem primjeru, desni operator pomaka pomaknuo je decimalu -50 (11001110) za dva mjesta udesno što je rezultiralo decimalom -13 (11110011).
Nepredpisani operator desnog pomaka (>>>).
Desni pomak bez predznaka (>>>) pomiče bitove broja udesno za određeni broj mjesta i ispunjava prazna mjesta s lijeve strane nulama. Operater odbacuje višak bitova koje pomiče udesno.
Evo sintakse za nepredpisani operator desnog pomaka:
a >>> b
Gdje a je operand za desni operator pomaka, i b je broj bitova za koje će operator pomaknuti operand.
Operator desnog pomaka bez predznaka radi slično desnom pomaku. Međutim, za razliku od desnog operatora pomaka (>>), kod pomaka ne čuva predznak broja. Umjesto toga, tretira broj kao cijeli broj bez predznaka i popunjava krajnji lijevi bit nulom.
Na primjer:
neka a = -5; // 11111111 11111111 11111111 11111011
neka b = 2;neka rezultat = a >>> b; // 00111111 11111111 11111111 11111110
konzola.log (rezultat); // 1073741822
U ovom primjeru, operator desnog pomaka bez predznaka pomaknuo je "-5" dva razmaka udesno, učinkovito uklanjajući znak i rezultirajući decimalnim brojem "1073741822".
Primjene bitnih operatora
Manipulirajući pojedinačnim bitovima u binarnim brojevima, bitovni operatori mogu stvoriti složenu funkcionalnost koju je inače teško ili nemoguće postići tradicionalnim aritmetičkim operacijama.
Razumijevanje korištenja bitovnih operatora može vam pomoći u izgradnji učinkovitijih i učinkovitijih web aplikacija.