Bitové operátory se snadno používají a mohou vést k bleskově rychlému kódu. Zjistěte, jaké to jsou a jak je používat.
Bitové operátory jsou ty, které fungují na binární úrovni. Jejich provedení je často velmi rychlé a obvykle působí na dva operandy.
Pomocí bitových operátorů můžete manipulovat s binárními čísly, optimalizovat kód, komprimovat data a implementovat techniky pro grafiku nebo programování her. Stejně jako většina ostatních programovacích jazyků má JavaScript vynikající podporu pro bitové operace.
Co jsou operátoři?
Většina programovacích jazyků používá koncept „operátora“ – symbol, který říká interpretovi, aby provedl určitou matematickou, relační nebo logickou operaci.
Je jich mnoho různé typy operátorů JavaScript měli byste si být vědomi, od těch, které vypadají jako standardní matematické operátory, jako je "+", po operátory, které porovnávají dvě hodnoty. Bitové operátory jsou speciální množinou, která se zabývá binárními čísly.
Bitový operátor AND (&).
JavaScript bitový AND (
&) operátor porovná odpovídající bity dvou binární operandy – čísla, která obsahují pouze 0 a 1. Pro každý pár vstupních bitů je odpovídající výstupní bit „1“, pokud jsou oba vstupní bity „1“ nebo „0“ jinak.Zde je syntaxe bitového operátoru AND:
a & b
V tomto příkladu A a b jsou operandy, se kterými provádíte bitovou operaci.
Zde je návod, jak funguje bitový operátor AND:
- Operace AND se vztahuje na každý pár odpovídajících bitů A a b zprava doleva.
- Pokud jsou oba bity 1, výsledek je 1. Pokud je některý bit 0, výsledek je 0.
- Výsledkem je nové číslo, kde každý bit představuje výsledek operace AND na odpovídajících bitech A a b.
Například:
nechat a = 50; // 00110010
nechat b = 100; // 01100100nechat výsledek = a & b; // 00100000
řídicí panel.log (výsledek); // 32
Ve výše uvedeném příkladu A je 50 v desítkové soustavě, což je ekvivalentní binárnímu číslu 00110010 a b je 100 v desítkové soustavě, což odpovídá binárnímu číslu 01100100. Operátor AND porovná každý pár odpovídajících bitů zprava doleva a vytvoří výsledné binární číslo 00100000, což je 32 v desítkové soustavě.
Bitový operátor OR (|).
Bitové OR (|) operátor porovná odpovídající bity dvou operandů a vrátí „1“, pokud jeden nebo oba bity jsou „1“ a „0“, pokud jsou oba bity „0“.
Zde je syntaxe bitového operátoru OR:
a | b
Kde A a b jsou operandy operace.
Bitový operátor OR (|) funguje stejně jako bitový operátor AND. Jediný rozdíl je v tom, že operátor OR vrátí „1“, pokud je „jeden“ z bitů „1“ a „0“, pokud jsou „oba“ bity „0“.
Například:
nechat a = 50; // 00110010
nechat b = 100; // 01100100nechat výsledek = a | b; // 01110110
řídicí panel.log (výsledek); // 118
Ve výše uvedeném příkladu bitový operátor OR porovnává každý pár bitů zprava doleva (tj. 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, a tak dále). Výsledné binární číslo je 01110110, což je 118 v desítkové soustavě.
Bitový operátor XOR (^).
Bitový XOR (^) operátor porovná odpovídající bity dvou operandů a vrátí „1“, pokud jeden, ale ne oba operandy, je „1“ a „0“, pokud jsou oba operandy „1“ nebo „0“.
Zde je syntaxe bitového operátoru XOR:
a ^ b
Kde A a b jsou operandy operace.
Bitový operátor XOR funguje stejně jako bitové operátory OR a AND. Jediný rozdíl je v tom, že vrací „1“, pokud „jeden, ale ne oba“ z operandů je „1“ a „0“, pokud jsou „oba“ operandy „1“ nebo „0“.
Například:
nechat a = 50; // 00110010
nechat b = 100; // 01100100nechat výsledek = a ^ b; // 01010110
řídicí panel.log (výsledek); // 86
Ve výše uvedeném příkladu operátor XOR porovnává každý pár bitů zprava doleva (tj. 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, a tak dále). Výsledné binární číslo je 01010110, což je 86 v desítkové soustavě.
Bitový operátor NOT (~).
Bitové NE (~) operátor je unární operátor, který pracuje s jedním celým číslem invertováním všech jeho bitů. Jinými slovy, mění každý bit „0“ na „1“ a každý bit „1“ na „0“.
Zde je syntaxe bitového operátoru NOT:
~c
Kde C je operand.
Bitový operátor NOT funguje tak, že invertuje všechny bity operandu, včetně bitů znaménka.
Například:
nechat c = 10; // 00001010
nechat d = -10; // 11110110
řídicí panel.log(~c); // 11110101
řídicí panel.log(~d); // 00001001
Ve výše uvedeném příkladu operátor NOT invertuje všechny bity (tj. 0 → 1, 1 → 0atd.), včetně znaménkových bitů.
Levý Shift (<
Levý operátor posunu posouvá bity daného čísla doleva. Operátor bere dva operandy: číslo, o které se má posunout, a počet bitů, o který se má posunout.
Zde je syntaxe operátoru posunu vlevo:
a << b
Kde A je operand pro operátora levé směny a b je počet bitů, o které operátor posune operand.
Operátor posunu doleva funguje tak, že každý bit operandu posune doleva o určený počet pozic a přebytečné bity posunuté doleva zahodí.
Například:
nechat a = 50; // 00110010
nechat b = 2;nechat výsledek = a << b; // 11001000
řídicí panel.log (výsledek); // 200
Ve výše uvedeném příkladu operátor posunu vlevo posunul desetinnou 50 binární 00110010 o dvě místa. Výsledná binární hodnota je 11001000, což je 200 jako desetinné číslo.
Operátor pravého posunu (>>) šířícího znamení
Pravý posun šířící znamení (>>) posune bity čísla doprava při zachování znaménka původního čísla. Operátor bere dva operandy: číslo, o které se má posunout, a počet bitů, o který se má posunout.
Zde je syntaxe operátoru posunu vpravo šířícího znamení:
a >> b
Kde A je operand pro operátora pravé směny a b je počet bitů, o které operátor posune operand.
Operátor řazení vpravo funguje podobně jako operátor řazení vlevo; jediný rozdíl v provozním režimu spočívá v tom, že pravý posun udržuje znaménko.
Například:
nechat a = -50; // 11001110
nechat b = 2;nechat výsledek = a >> b; // 11110011
řídicí panel.log (výsledek); // -13
Ve výše uvedeném příkladu operátor posunu vpravo posunul desetinnou čárku -50 (11001110) o dvě místa doprava, což vedlo k desetinné čárce -13 (11110011).
Nepodepsaný Operátor pravého posunu (>>>).
Nepodepsaný pravý posun (>>>) operátor posune bity čísla doprava o zadaný počet pozic a prázdná místa nalevo vyplní nulami. Operátor odhodí přebytečné bity, které posune doprava.
Zde je syntaxe pro nepodepsaný operátor posunu vpravo:
a >>> b
Kde A je operand pro operátora pravé směny a b je počet bitů, o které operátor posune operand.
Nesignovaná pravá směna funguje podobně jako pravá směna. Na rozdíl od operátora pravé směny (>>), nezachovává znaménko čísla při řazení. Místo toho považuje číslo za celé číslo bez znaménka a vyplní bit zcela vlevo nulou.
Například:
nechat a = -5; // 11111111 11111111 11111111 11111011
nechat b = 2;nechat výsledek = a >>> b; // 00111111 11111111 11111111 11111110
řídicí panel.log (výsledek); // 1073741822
V tomto příkladu operátor posunu vpravo bez znaménka posunul „-5“ o dvě mezery doprava, čímž účinně odstranil znaménko a výsledkem bylo desetinné „1073741822“.
Aplikace bitových operátorů
Manipulací s jednotlivými bity v binárních číslech mohou bitové operátory vytvářet složité funkce, které je jinak obtížné nebo nemožné dosáhnout tradičními aritmetickými operacemi.
Pochopení toho, jak používat bitové operátory, vám může pomoci vytvořit efektivnější a výkonnější webové aplikace.