Bitový operátor

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Bitový operátor se používá různých programovacích jazycích. Pracuje s jedním nebo dvěma bitovými vzory nebo binárními čísly a umožňuje manipulovat s hodnotami přímo na úrovni jednotlivých bitů. Na mnoha počítačích je provádění bitových operací rychlejší než provádění obvyklých operací sčítání, odečítání. Pokud se pomocí bitových operací provádí násobení nebo dělení je doba provádění s pomocí bitových operací výrazně kratší.[zdroj?]

Bitové operátory[editovat | editovat zdroj]

NOT - Bitová negace[editovat | editovat zdroj]

Bitový operátor NOT, nebo doplněk, je unární operace, která provádí logickou negaci každého bitu. Pro provedení operace je hodnota každého bitu opačná, tzn. z jednotek se stanou nuly a naopak.

NOT 0111
  = 1000

V některých programovacích jazycích včetně C/C++ je bitový operátor NOT představován znakem '~' (tilda).

Pozor. Někdy se tento bitový operátor zaměňuje s logickým operátorem NOT, který je např. v C/C++ představován znakem '!' (vykřičník). Logický operátor NOT ovšem bere celou zadanou hodnotu jako jednu hodnotu typu boolean a změní hodnotu true na hodnotu false nebo naopak. Logický operátor NOT není bitovým operátorem.

OR - Bitový součet[editovat | editovat zdroj]

Bitový operátor OR bere dva bitové vzory o stejné délce a vytváří nový bitový vzor, jehož hodnota závisí na hodnotě vstupních bitových vzorů. Porovnává postupně jeden po druhém příslušné bity (první bit prvního vzoru s prvním bitem druhého vzoru, druhý bit prvního vzoru s druhým bitem druhého vzoru atd.) a provádí s každým párem logickou operaci OR. Výsledek je pak hodnota 1, pokud alespoň jeden bit (nebo také oba dva) mají hodnotu 1, nebo je výsledek hodnota 0, pokud oba dva bity mají hodnotu 0. Příklad:

   0101
OR 0011
 = 0111

V jazycích C/C++ je bitový operátor OR představován znakem '|' (pozn. nezaměňovat s logickým operátorem OR, který je přestavován dvojicí těchto znaků '||').

XOR - Bitová nonekvivalence[editovat | editovat zdroj]

Bitový operátor XOR bere dva bitové vzory o stejné délce a vytváří nový bitový vzor, jehož hodnota závisí na hodnotě vstupních bitových vzorů. Porovnává postupně jeden po druhém příslušné bity (první bit prvního vzoru s prvním bitem druhého vzoru, druhý bit prvního vzoru s druhým bitem druhého vzoru atd.) a provádí s každým párem logickou operaci XOR. Hodnota bitu na dané pozici ve výsledku je 1, pokud jsou hodnoty bitů na téže pozici ve stupních bitových vzorech různé, jinak je hodnota bitu ve výsledku 0. Příklad:

    0101
XOR 0011
  = 0110 

V jazycích C/C++ je bitový operátor XOR představován znakem '^' (stříška).

V assembleru se používá operace XOR pro rychlé nastavení registru na nulovou hodnotu tím, že jsou obě vstupní hodnoty operace stejné. Příklad:

XOR AX, AX 

Na některých architekturách tato operace vyžaduje méně cyklů CPU než např. naplnění registru hodnotou 0. Příklad:

MOV AX, 0 

Takže je na některých architekturách operace XOR rychlejší.

AND - Bitový součin[editovat | editovat zdroj]

Bitový operátor AND bere dva bitové vzory o stejné délce a vytváří nový bitový vzor, jehož hodnota závisí na hodnotě vstupních bitových vzorů. Porovnává postupně jeden po druhém příslušné bity (první bit prvního vzoru s prvním bitem druhého vzoru, druhý bit prvního vzoru s druhým bitem druhého vzoru atd.) a provádí s každým párem logickou operaci AND. Hodnota bitu na dané pozici ve výsledku je 1, pokud jsou hodnoty bitů na téže pozici v obou vstupních bitových vzorech 1, jinak je hodnota bitu na dané pozici ve výsledku 0. Příklad:

    0101
AND 0011
  = 0001

V jazycích C/C++ je bitový operátor AND představován znakem '&' (pozn. nezaměňovat s logickým operátorem AND, který je představován dvojicí těchto znaků '&&').

Bitový posun[editovat | editovat zdroj]

Aritmetický posun[editovat | editovat zdroj]

Aritmetický posuv vlevo
Aritmetický posuv vpravo
   00010111 POSUN O JEDNU POZICI DOLEVA
=  00101110
   00010111 POSUN O JEDNU POZICI DOPRAVA
=  00001011
   00010111 POSUN O DVĚ POZICE DOLEVA
=  01011100

Posun doleva se v programovacích jazycích C,C++,C# zapisuje pomocí operátoru <<. Komplementární posun doprava pomocí >>.

Významy bitových posunů[editovat | editovat zdroj]

Pro posun doleva o n pozic platí tento vztah: x << n = x \cdot 2^n.

Pro posun doprava o n pozic platí inverzní vztah: x >> n = x % 2^n, kde operátor % znamená celočíselné dělení.

Logický posun[editovat | editovat zdroj]

Logický posuv vpravo
Logický posuv vlevo

Související články[editovat | editovat zdroj]