Bitové operátory sa pohodlne používajú a môžu viesť k bleskovo rýchlemu kódu. Zistite, ktoré to sú a ako ich používať.
Bitové operátory sú tie, ktoré pôsobia na binárnej úrovni. Často sa vykonávajú veľmi rýchlo a zvyčajne pôsobia na dva operandy.
Bitové operátory môžete použiť na manipuláciu s binárnymi číslami, optimalizáciu kódu, kompresiu údajov a implementáciu techník pre grafiku alebo programovanie hier. Ako väčšina ostatných programovacích jazykov, JavaScript má vynikajúcu podporu pre bitové operácie.
Čo sú operátori?
Väčšina programovacích jazykov používa koncept „operátora“ – symbol, ktorý tlmočníkovi hovorí, aby vykonal špecifickú matematickú, relatívnu alebo logickú operáciu.
Je ich veľa rôzne typy operátorov JavaScript mali by ste si byť vedomí, od tých, ktoré vyzerajú ako štandardné matematické operátory, ako napríklad "+", až po operátory, ktoré porovnávajú dve hodnoty. Bitové operátory sú špeciálna množina, ktorá sa zaoberá binárnymi číslami.
Bitový operátor AND (&).
JavaScript bitový AND (
&) operátor porovnáva zodpovedajúce bity dvoch binárne operandy – čísla, ktoré obsahujú iba 0 a 1. Pre každý pár vstupných bitov je zodpovedajúci výstupný bit „1“, ak sú oba vstupné bity „1“ alebo inak „0“.Tu je syntax bitového operátora AND:
a a b
V tomto príklade a a b sú operandy, na ktorých vykonávate bitovú operáciu.
Takto funguje bitový operátor AND:
- Operácia AND sa vzťahuje na každý pár zodpovedajúcich bitov a a b sprava doľava.
- Ak sú oba bity 1, výsledok je 1. Ak je jeden bit 0, výsledok je 0.
- Výsledkom je nové číslo, kde každý bit predstavuje výsledok operácie AND na zodpovedajúcich bitoch a a b.
Napríklad:
nech a = 50; // 00110010
nech b = 100; // 01100100nech výsledok = a & b; // 00100000
konzoly.log (výsledok); // 32
Vo vyššie uvedenom príklade a je 50 v desiatkovej sústave, čo zodpovedá binárnemu číslu 00110010 a b je 100 v desiatkovej sústave, čo zodpovedá binárnemu číslu 01100100. Operátor AND porovná každý pár zodpovedajúcich bitov sprava doľava a vytvorí výsledné binárne číslo 00100000, čo je 32 v desiatkovej sústave.
Bitový operátor OR (|).
Bitové OR (|) operátor porovná zodpovedajúce bity dvoch operandov a vráti „1“, ak jeden alebo oba bity sú „1“ a „0“, ak sú oba bity „0“.
Tu je syntax bitového operátora OR:
a | b
Kde a a b sú operandy operácie.
Bitový operátor OR (|) funguje rovnako ako bitový operátor AND. Jediný rozdiel je v tom, že operátor OR vráti „1“, ak „jeden“ z bitov je „1“ a „0“, ak „oba“ bity sú „0“.
Napríklad:
nech a = 50; // 00110010
nech b = 100; // 01100100nech výsledok = a | b; // 01110110
konzoly.log (výsledok); // 118
Vo vyššie uvedenom príklade bitový operátor OR porovnáva každý pár bitov sprava doľava (t.j. 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, a tak ďalej). Výsledné binárne číslo je 01110110, čo je 118 v desiatkovej sústave.
Bitový operátor XOR (^).
Bitový XOR (^) operátor porovná zodpovedajúce bity dvoch operandov a vráti „1“, ak jeden, ale nie oba operandy sú „1“ a „0“, ak sú oba operandy „1“ alebo „0“.
Tu je syntax bitového operátora XOR:
a ^ b
Kde a a b sú operandy operácie.
Bitový operátor XOR funguje rovnako ako bitové operátory OR a AND. Jediný rozdiel je v tom, že vráti „1“, ak „buď, ale nie oba“ z operandov je „1“ a „0“, ak „oba“ operandy sú „1“ alebo „0“.
Napríklad:
nech a = 50; // 00110010
nech b = 100; // 01100100nech výsledok = a ^ b; // 01010110
konzoly.log (výsledok); // 86
Vo vyššie uvedenom príklade operátor XOR porovnáva každý pár bitov sprava doľava (t.j. 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, a tak ďalej). Výsledné binárne číslo je 01010110, čo je 86 v desiatkovej sústave.
Bitový operátor NOT (~).
Bitové NIE (~) operátor je unárny operátor, ktorý pracuje s jedným celým číslom invertovaním všetkých jeho bitov. Inými slovami, mení každý bit „0“ na „1“ a každý bit „1“ na „0“.
Tu je syntax bitového operátora NOT:
~c
Kde c je operand.
Bitový operátor NOT funguje tak, že invertuje všetky bity operandu vrátane bitov so znamienkom.
Napríklad:
nech c = 10; // 00001010
nech d = -10; // 11110110
konzoly.log(~c); // 11110101
konzoly.log(~d); // 00001001
Vo vyššie uvedenom príklade operátor NOT invertuje všetky bity (t.j. 0 → 1, 1 → 0, atď.), vrátane znamienkových bitov.
Ľavý Shift (<
Operátor posunu vľavo posúva bity daného čísla doľava. Operátor má dva operandy: číslo, o ktoré sa má posunúť, a počet bitov, o ktoré sa má posunúť.
Tu je syntax pre operátor posunu vľavo:
a << b
Kde a je operand pre operátora zmeny vľavo a b je počet bitov, o ktoré operátor posunie operand.
Operátor posunu doľava funguje tak, že každý bit operandu posunie doľava o určený počet pozícií a nadbytočné bity posunuté doľava zahodí.
Napríklad:
nech a = 50; // 00110010
nech b = 2;nech vysledok = a << b; // 11001000
konzoly.log (výsledok); // 200
Vo vyššie uvedenom príklade operátor posunu vľavo posunul desatinnú hodnotu 50 binárneho čísla 00110010 o dve miesta. Výsledná binárna hodnota je 11001000, čo je 200 ako desatinné číslo.
Operátor pravého posunu (>>) na šírenie znakov
Pravý posun šírenia znamienka (>>) posunie bity čísla doprava, pričom zachová znamienko pôvodného čísla. Operátor má dva operandy: číslo, o ktoré sa má posunúť, a počet bitov, o ktoré sa má posunúť.
Tu je syntax operátora posunu vpravo na šírenie znakov:
a >> b
Kde a je operand pre operátora pravej zmeny a b je počet bitov, o ktoré operátor posunie operand.
Operátor radenia vpravo funguje podobne ako ľavý operátor radenia; jediný rozdiel v režime prevádzky je v tom, že pravý posun zachováva znamenie.
Napríklad:
nech a = -50; // 11001110
nech b = 2;nech vysledok = a >> b; // 11110011
konzoly.log (výsledok); // -13
Vo vyššie uvedenom príklade operátor posunu vpravo posunul desatinnú čiarku -50 (11001110) o dve medzery doprava, výsledkom čoho je desatinná čiarka -13 (11110011).
Nepopísaný operátor pravého posunu (>>>).
Nepopísaný pravý posun (>>>) operátor posunie bity čísla doprava o určený počet pozícií a prázdne miesta naľavo vyplní nulami. Operátor zahodí prebytočné bity, ktoré posunie doprava.
Tu je syntax pre nepodpísaný operátor posunu vpravo:
a >>> b
Kde a je operand pre operátora pravej zmeny a b je počet bitov, o ktoré operátor posunie operand.
Operátor pravého posunu bez znamienka funguje podobne ako pravý posun. Avšak na rozdiel od operátora pravej zmeny (>>), nezachováva znamienko čísla pri radení. Namiesto toho považuje číslo za celé číslo bez znamienka a vyplní bit úplne vľavo nulou.
Napríklad:
nech a = -5; // 11111111 11111111 11111111 11111011
nech b = 2;nech vysledok = a >>> b; // 00111111 11111111 11111111 11111110
konzoly.log (výsledok); // 1073741822
V tomto príklade operátor posunu vpravo bez znamienka posunul „-5“ o dve medzery doprava, čím sa znamienko efektívne odstránilo a výsledkom je desatinné „1073741822“.
Aplikácie bitových operátorov
Manipuláciou s jednotlivými bitmi v binárnych číslach môžu bitové operátory vytvárať komplexné funkcie, ktoré je inak ťažké alebo nemožné dosiahnuť tradičnými aritmetickými operáciami.
Pochopenie toho, ako používať bitové operátory, vám môže pomôcť vytvoriť efektívnejšie a výkonnejšie webové aplikácie.