Bitni operaterji so priročni za uporabo in lahko povzročijo izjemno hitro kodo. Ugotovite, kaj so in kako jih uporabljati.
Bitni operaterji so tisti, ki delujejo na binarni ravni. Pogosto so zelo hitri za izvedbo in običajno delujejo na dva operanda.
Uporabite lahko bitne operatorje za manipulacijo binarnih števil, optimizacijo kode, stiskanje podatkov in implementacijo tehnik za grafiko ali programiranje iger. Kot večina drugih programskih jezikov ima JavaScript odlično podporo za bitne operacije.
Kaj so operaterji?
Večina programskih jezikov uporablja koncept "operatorja" - simbola, ki tolmaču pove, naj izvede določeno matematično, relacijsko ali logično operacijo.
Veliko jih je različne vrste operatorjev JavaScript morate vedeti, od tistih, ki so videti kot standardni matematični operatorji, kot je "+", do operatorjev, ki primerjajo dve vrednosti. Bitni operatorji so poseben niz, ki obravnava binarna števila.
Bitni operator IN (&).
Bitni IN (&) primerja ustrezne bite dveh binarni operandi – števila, ki vsebujejo samo 0 in 1
. Za vsak par vhodnih bitov je ustrezni izhodni bit »1«, če sta oba vhodna bita »1« ali »0« drugače.Tukaj je sintaksa bitnega operaterja IN:
a & b
V tem primeru a in b so operandi, na katerih izvajate bitno operacijo.
Tukaj je opisano, kako deluje bitni operater IN:
- Operacija IN velja za vsak par ustreznih bitov v a in b od desne proti levi.
- Če sta oba bita 1, je rezultat 1. Če je kateri koli bit 0, je rezultat 0.
- Rezultat je novo število, kjer vsak bit predstavlja izid operacije IN na ustreznih bitih a in b.
Na primer:
pustiti a = 50; // 00110010
pustiti b = 100; // 01100100pustiti rezultat = a & b; // 00100000
konzola.log (rezultat); // 32
V zgornjem primeru a je 50 v decimalki, kar je enakovredno binarnemu številu 00110010 in b je 100 v decimalki, kar je enakovredno binarnemu številu 01100100. Operator AND primerja vsak par ustreznih bitov od desne proti levi in proizvede nastalo binarno število 00100000, ki je 32 v decimalki.
Bitni operator ALI (|).
Bitni ALI (|) primerja ustrezne bite dveh operandov in vrne »1«, če sta eden ali oba bita »1« in »0«, če sta oba bita »0«.
Tukaj je sintaksa bitnega operatorja ALI:
a | b
Kje a in b so operandi operacije.
Bitni operator ALI (|) deluje na enak način kot bitni operator IN. Edina razlika je v tem, da operator ALI vrne "1", če je "kateri koli" od bitov "1", in "0", če sta "oba" bita "0".
Na primer:
pustiti a = 50; // 00110010
pustiti b = 100; // 01100100pustiti rezultat = a | b; // 01110110
konzola.log (rezultat); // 118
V zgornjem primeru bitni operator ALI primerja vsak par bitov od desne proti levi (tj. 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, in tako naprej). Dobljeno binarno število je 01110110, kar je 118 v decimalnem zapisu.
Bitni operator XOR (^).
Bitni XOR (^) primerja ustrezne bite dveh operandov in vrne »1«, če je eden od operandov »1«, vendar ne oba, in »0«, če sta oba operanda »1« ali »0«.
Tukaj je sintaksa bitnega operatorja XOR:
a ^ b
Kje a in b so operandi operacije.
Bitni operator XOR deluje na enak način kot bitni operator OR in IN. Edina razlika je v tem, da vrne "1", če je "ali, vendar ne oba" od operandov "1", in "0", če sta "oba" operanda "1" ali "0".
Na primer:
pustiti a = 50; // 00110010
pustiti b = 100; // 01100100pustiti rezultat = a ^ b; // 01010110
konzola.log (rezultat); // 86
V zgornjem primeru operator XOR primerja vsak par bitov od desne proti levi (tj. 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, in tako naprej). Dobljeno binarno število je 01010110, kar je 86 v decimalnem zapisu.
Bitni operator NE (~).
Bitno NE (~) je unarni operator, ki deluje na enem samem celem številu tako, da obrne vse njegove bite. Z drugimi besedami, vsak bit »0« spremeni v »1« in vsak bit »1« v »0«.
Tukaj je sintaksa bitnega operatorja NOT:
~c
Kje c je operand.
Bitni operator NOT deluje tako, da obrne vse bite operanda, vključno z biti predznaka.
Na primer:
pustiti c = 10; // 00001010
pustiti d = -10; // 11110110
konzola.log(~c); // 11110101
konzola.log(~d); // 00001001
V zgornjem primeru operator NOT obrne vse bite (tj. 0 → 1, 1 → 0, itd.), vključno z znaki.
Levi operator Shift (<
Operator premika v levo premakne bite danega števila v levo. Operator vzame dva operanda: število za premik in število bitov za premik.
Tukaj je sintaksa za levi operater premika:
a << b
Kje a je operand za levi operator premika in b je število bitov, za katere bo operater premaknil operand.
Operator premika v levo deluje tako, da premakne vsak bit operanda v levo za določeno število položajev in zavrže odvečne bite, premaknjene v levo.
Na primer:
pustiti a = 50; // 00110010
pustiti b = 2;pustiti rezultat = a << b; // 11001000
konzola.log (rezultat); // 200
V zgornjem primeru je levi operater premaknil decimalno število 50 binarnega 00110010 za dve mesti. Dobljena binarna vrednost je 11001000, kar je 200 kot decimalno število.
Operator desnega premika (>>), ki širi znake
Premik v desno, ki širi znak (>>) premakne bite števila v desno, pri tem pa ohrani predznak prvotnega števila. Operator vzame dva operanda: število za premik in število bitov za premik.
Tukaj je sintaksa za operator desnega premika, ki širi znak:
a >> b
Kje a je operand za desni operater premika in b je število bitov, za katere bo operater premaknil operand.
Operator desnega premika, ki širi znak, deluje podobno kot operator levega premika; razlika v načinu delovanja je le v tem, da desni premik ohranja predznak.
Na primer:
pustiti a = -50; // 11001110
pustiti b = 2;pustiti rezultat = a >> b; // 11110011
konzola.log (rezultat); // -13
V zgornjem primeru je operater desnega premika premaknil decimalno -50 (11001110) za dva presledka v desno, kar je povzročilo decimalno -13 (11110011).
Nepodpisani operator desnega premika (>>>).
Nepredznačeni desni premik (>>>) premakne bite števila v desno za določeno število mest in zapolni prazna mesta na levi z ničlami. Operater zavrže odvečne bitove, ki jih premakne v desno.
Tukaj je sintaksa za nepredznačeni desni operater premika:
a >>> b
Kje a je operand za desni operater premika in b je število bitov, za katere bo operater premaknil operand.
Operator nepredznačenega desnega premika deluje podobno kot desni premik. Vendar za razliko od desnega operaterja premika (>>), pri premiku ne ohrani predznaka števila. Namesto tega obravnava število kot celo število brez predznaka in zapolni skrajni levi bit z ničlo.
Na primer:
pustiti a = -5; // 11111111 11111111 11111111 11111011
pustiti b = 2;pustiti rezultat = a >>> b; // 00111111 11111111 11111111 11111110
konzola.log (rezultat); // 1073741822
V tem primeru je operater nepredznačenega desnega premika premaknil »-5« za dva presledka v desno, s čimer je učinkovito odstranil predznak in povzročil decimalno število »1073741822«.
Uporaba bitnih operaterjev
Z manipulacijo posameznih bitov v binarnih številih lahko bitni operaterji ustvarijo zapleteno funkcionalnost, ki jo je sicer težko ali nemogoče doseči s tradicionalnimi aritmetičnimi operacijami.
Razumevanje uporabe bitnih operaterjev vam lahko pomaga zgraditi učinkovitejše in zmogljivejše spletne aplikacije.