Úvod do bitových operátorov
Slovo bitové je odvodené od slova bit. Mali by ste už poznať, že bit má dve stavy, ktoré môže nadobudnúť. Buď stav 1, čiže pravda alebo 0, čiže nepravda. Hovoríme tomu pravdivostná hodnota.
Medzi bitové operátory radíme bitový operátor AND, OR, XOR, NOT. Okrem toho v jazyku C++ máme operátor bitového posunu doľava a doprava. K tomu sa dostaneme až v budúcej častí.
Výroková logika
Ešte predtým, než sa dostaneme k vysvetľovaniu bitových operátorov je potrebné sa zoznámiť s výrokovou logikou. V krátkostí bez žiadnych zložitých definícii, na ktoré aj tak zabudnete po prečítaní článku, radšej ukážka.
Napríklad operátor AND je logický súčin a nech 1 predstavuje pravdivý výrok a 0 nepravdivý. Potom platia následovne vzťahy:
0 AND 0 = 0
1 AND 0 = 0
0 AND 1 = 0
1 AND 1 = 1
Samozrejme, niesme limitovaný len porovnaním jedného výroku na jednej strane a jedného na druhej strane. Môžme porovnávať viacero výrokov na jednej strane a zároveň na druhej strane. Porovnáva sa prvý s prvým, druhý s druhým, tretí s tretím atď...
0110 AND 1110 = 0110
Ok fajn, základy máme za sebou. Avšak, aby sme pochopili aj príklady, ktoré vám chcem ukázať, je si treba ešte niečo dovysvetliť.
Čísla 1, 5, 15, 77, 1588 atď sú čísla v desiatkovej sústave. Tieto čísla sa dajú previesť do binárnej (dvojkovej) sústavy. Nebudeme si tu vysvetľovať pravidla, to by bola téma na jeden celý článok. Vypíšem len binárnu podobu čísel od 0 do 15, nech máte aspoň hmlistú predstavu, o čom je reč.
Interval čísel 0-15 sa nám zmestí do 4-bitovej reprezentácie. 4-bitová reprezentácia má 16 stavov. Vieme to vypočítať pomocou vzorca 2^n kde n je počet bitov. Čiže 2^4 = 16.
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = 10
1011 = 11
1100 = 12
1101 = 13
1110 = 14
1111 = 15
Čísla, znaky, symboly v ASCII tabuľke sú v 8-bitovej reprezentácii. 8 bitov nazývame 1 bajt. Počet stavov je 2^8 = 256. Rozsah ASCII tabuľky je 0-255. Ako by vyzerali (a vyzerajú tam pod kapotou počítača) čísla od 0-15 v 8-bitovom predvedení?
0000 0000 = 0
0000 0001 = 1
0000 0010 = 2
0000 0011 = 3
0000 0100 = 4
0000 0101 = 5
0000 0110 = 6
0000 0111 = 7
0000 1000 = 8
0000 1001 = 9
0000 1010 = 10
0000 1011 = 11
0000 1100 = 12
0000 1101 = 13
0000 1110 = 14
0000 1111 = 15
Bitový operátor AND
Už viac krát bolo spomenuté, o čom je operátor AND. Ak sú oba hodnoty pravdivé, tak je výrok pravdivý, inak je nepravdivý. Správanie operátoru AND nájdete vyššie ale pre zopakovanie ešte raz ukážka:
0 AND 0 = 0
1 AND 0 = 0
0 AND 1 = 0
1 AND 1 = 1
V jazyku C++ sa bitový operátor AND označuje &. Pozor, je rozdiel medzi logickými a bitovými operátormi a samozrejme rozdiely sú i v označeniach. Taktiež si uvedomte, že ide o bitové operácie a s klasickým súčinom alebo súčtom tak, ako to poznáte z aritmetiky má pramálo spoločného.
1. príklad:
#include <iostream> using namespace std; int main() { cout << "6 & 14 = " <<(6 & 14)<< "\n"; cout << "11 & 14 = " <<(11 & 14)<< "\n"; cout << "8 & 10 = " <<(8 & 10)<< "\n"; return 0; }
Výsledok programu:
6 & 14 = 6 11 & 14 = 10 8 & 10 = 8
Rozbor programu: Program je jednoduchý na pochopenie. Nezabudnite dať do zátvorky výrok, pretože môže kompilátor štrajkovať.
Bitový operátor OR
OR má takéto správanie:
0 OR 0 = 0
1 OR 0 = 1
0 OR 1 = 1
1 OR 1 = 1
V krátkostí vieme o OR povedať, že ak aspoň jedna z dvojice (nezáleží na poradí) je pravdivá, výrok je pravdivý. V jazyku C++ bitový, podotýkam bitový nie logický, označujeme symbolom |.
2. príklad:
#include <iostream> using namespace std; int main() { cout << "6 | 14 = " <<(6 | 14)<< "\n"; cout << "11 | 14 = " <<(11 | 14)<< "\n"; cout << "8 | 10 = " <<(8 | 10)<< "\n"; return 0; }
Výsledok programu:
6 | 14 = 14 11 | 14 = 15 8 | 10 = 10