Bitové operace jsou speciální typy operací, které se používají k práci s jednotlivými bity v číselných hodnotách. Používají se zřídka, ale mohou být užitečné pro některé specifické úlohy, například pro vytváření rychlejších algoritmů. Pro většinu úloh jsou aritmetické operace dostatečné a bitové operace jsou složitější na pochopení a mohou snadno vést k chybám.
Bitové operace pracují s hodnotami typu "number" pomocí 32bitového zápisu (tzn. rozsah od -231 do 231-1.), i když samotné číslo je uloženo v 64bitovém formátu. Toto omezení je způsobeno historickými důvody a je zachováno z důvodu zpětné kompatibility s dřívějšími verzemi JavaScriptu, které používaly pouze 32bitové celá čísla.
Zde je seznam několika běžných operátorů a krátké vysvětlení jejich chování:
- & (AND) - Binární operátor, který vrací hodnotu 1 pouze tehdy, pokud jsou oba operandy rovny 1. V opačném případě vrací hodnotu 0. Věnujte pozornost pořadí operandů při používání bitových operací. Například a & b je odlišné od b & a.
- | (OR) - Binární operátor, který vrací hodnotu 1, pokud alespoň jeden z operandů je roven 1. V opačném případě vrací hodnotu 0.
- ^ (XOR) - Binární operátor, který vrací hodnotu 1, pokud jsou operandy odlišné (jeden je roven 1 a druhý 0). V opačném případě vrací hodnotu 0.
- ~ (NOT): Unární operátor, který změní hodnotu operandu na jeho inverzní hodnotu. Převrátí bity 0 na 1 a naopak.
Bitový posun
Tyto operátory jsou užitečné pro výkonnostně náročné úkoly, jako je například komprese dat nebo výpočet s velkými celými čísly.
Posun vlevo "<<"
Posune hodnotu na levou stranu o zadaný počet pozic a vyplní prázdná místa na pravé straně nulami. Tedy v desítkové soustavě každým posunem dojde k násobení hodnoty dvěma. Například:
console.log(2 << 1); // 4
console.log(2 << 2); // 8
Posun vpravo ">>"
Posune posune bity operandu o zadaný počet pozic vpravo podle druhého operandu
console.log(8 >> 1); // 4
// Například 8 >> 2 vrátí hodnotu 2, což odpovídá binární hodnotě 010.
console.log(8 >> 2);
Operátor ">>>"
Je operátor bitového posunu vpravo bez znaménka, který se liší od operátoru ">>" tím, že vyplňuje prázdná místa na levé straně nulami místo podle hodnoty prvního bitu. Tento operátor se používá k převodu hodnot na celé číslo, aniž by se zohledňovalo znaménko. Například -8 >>> 2 vrátí hodnotu 1073741822, což odpovídá binární hodnotě 00111111111111111111111111111110.