Co jsou to bitové operátory?
V počítačovém programu jsou bitové operátory operátory pro manipulaci s bitovými vzory ve výrazech. Bitově AND, NEBO, exkluzivní NEBO (XOR), NE, pravý a levý posun jsou běžné operace. Většina počítačových programovacích jazyků zahrnuje všech šest těchto operátorů. Často se používají k nastavení, vymazání nebo převrácení jednotlivých bitů v programech, které ovládají počítačový hardware. Bitové operátory se také často používají v algoritmech šifrování a komprese dat.
Běžné bitové operátory jsou obvykle reprezentovány symbolicky v programovacích jazycích jako C, C ++ a Java. Používají se ve výrazech stejně jako aritmetické operátory jako znaménka plus nebo mínus. Bitový operátor AND je reprezentován pomocí ampersand & , OR s potrubím | a XOR s náhradníkem ^ . NOT, také známý jako operátor doplňku, je označen vlnovkou ~ .
Operátor pravého řazení používá dvojitý stříbro směřující doprava >> . Naproti tomu posun doleva je indikován dvojitým střídavě směřujícím doleva << . Java zahrnuje další operaci pravého posunu, zobrazenou s trojitým stříškám směřujícím doprava >>> .
Bitové operátory aplikují logickou operaci na každou dvojici bitů v jejich operandech. NENÍ, pravý a levý posun mají pouze jeden pravý operand; druhou hodnotou v směnných operacích je počet bitů. Abychom lépe porozuměli tomu, jak operátoři bitových bitů pracují, může si jednotlivec vizualizovat své operandy jako binární číslice. Například operátor doplňku převrátí každý bit svého jediného operandu do opačného stavu. Jeden se stane nulou a nula se stane nulou. Doplněk 8bitové binární hodnoty 00110101 je 11001010.
Operátor AND má dva operandy. Bit po kousku se provádí logická operace AND pomocí jednoho odpovídajícího bitu z každého operandu. Výsledek každé bitové operace je umístěn do této bitové pozice celkového výsledku. Například operátor AND zpracuje bit 7 jednoho operandu s bitem 7 druhého operandu. Výsledek bude uložen v bitu 7 celkového výsledku.
V operaci AND musí být oba bity operandu ty, aby výsledek byl jeden, jinak bude výsledek nulový. Například pokud jsou 8bitové binární hodnoty operandů 00110101 a 11110000, bude výsledkem 00110000. Běžné použití operátoru AND je vynulovat konkrétní bity ve výsledku. To se provádí umístěním nul do těchto bitových pozic v jednom z operandů.
V operaci NEBO musí být oba bity operandu nula, aby výsledek byl nula; jinak je výsledkem jeden. Běžné použití operátoru OR je nastavení určitých bitů výsledku na ty. To se provádí umístěním na ty bitové pozice v jednom z operandů. Pro operaci XOR je výsledek nula, pokud jsou oba bity operandu nulové nebo pokud jsou oba bity operandu jedna - jinak je výsledek jeden.
Posun doleva a doprava posunuje bity v operandu doleva nebo doprava podle zadaného počtu bitových pozic. Logický pravý posun posune nulu do bitu zcela vlevo jako součást posunu. Aritmetický posun doprava zkopíruje bit zcela vlevo - znaménkový bit - před posun na stejnou pozici po posunu. Původní bit se také posune přímo spolu se zbytkem. Oba typy posunu doleva posunou nulu do bitu úplně vpravo.
Když je operand posunutý doprava, je kousek před posunem jednoduše vyhoden. Podobně se odstraní nejlevější bit před posunem doleva. Nelepí se na druhý konec operandu.
Operace bitového posunu závisí na jazyku a implementaci. Například v C a C ++ provádějí >> a << logické posuny, pokud je operand celé číslo bez znaménka. Pokud je operand podepsané celé číslo, je pravděpodobné, že místo toho bude proveden aritmetický posun. V Javě jsou všechny operandy považovány za podepsané a aritmetické posuny jsou vždy prováděny pomocí >> a << . Operátor >>> se používá pro logický posun doprava, ale stále je možné místo toho náhodně provést aritmetický posun doprava bez pečlivého typcastingu.
Komplikace mohou také nastat, když operandy mají různé délky bitů nebo když jsou některé podepsány a některé nejsou podepsány. Bitové operátory a numerické konstanty uprostřed složeného výrazu nemusí být vyhodnoceny podle očekávání. Je třeba věnovat pozornost tomu, aby byla ve výrazu uvedena velikost a podepsaná / nepodepsaná povaha každého množství. To lze provést pečlivým typováním nebo dočasným přiřazením konkrétním typům proměnných v programovém kódu.