Výpis souhrnů
Logické výrazy
Podtémata
Logické výrazy
V tomto tématu pracujeme s logickými výrazy s formálním značením (např. A or B), přičemž některé logické spojky značíme pomocí anglických slov (and, or, not). Toto značení je v informatice běžné, používá se například v mnohých programovacích jazycích. Téma dělíme na následující podtémata:
- Logické spojky a pravdivostní tabulky – význam jednotlivých logických spojek, přepisování z běžného jazyka do informatické notace (and, or, not, xor, ⇒, ⇔)
- Vyhodnocování logických výrazů – vyhodnocení složených výrazů kombinujících více logických spojek
- Úpravy logických výrazů – přepis na ekvivalentní výraz, který vypadá jinak, ale má vždy stejnou pravdivostní hodnotu
- Logické odvozování s výrazy – odvozování závěrů z předpokladů, kterých může být i více
Práci s logickými výroky si můžete dále procvičit i v různých jiných zápisech:
- Logické výroky slovy – výroky v běžném jazyce
- Logika v rámci předmětu matematika – práce s výroky v matematické notaci (∧,∨,¬)
- Logické výrazy v Pythonu – práce s logickými výrazy v kontextu programování
Logické spojky a pravdivostní tabulky
Pravdivostní hodnoty
V informatice používáme většinou zaměnitelně následující:
- 1 = true = pravda
- 0 = false = nepravda
Logické spojky
| Zápis | Název | Význam |
|---|---|---|
| \text{ not } X | negace | neplatí X |
| X \text{ and } Y | konjunkce, a zároveň | X a Y platí současně |
| X \text{ or } Y | disjunkce, nebo | platí alespoň jedno z X a Y |
| X \text{ xor } Y | exkluzivní nebo | platí právě jedno z X a Y |
| X \Rightarrow Y | implikace, jestliže-pak | pokud platí X, pak platí i Y |
| X \Leftrightarrow Y | ekvivalence, právě když | X platí právě tehdy, když platí Y |
Pravdivostní tabulka logických operací
| X | Y | X \text{ and } Y | X \text{ or } Y | X \text{ xor } Y | X \Rightarrow Y | X \Leftrightarrow Y |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 | 1 | 1 |
Vyhodnocování logických výrazů
Vyhodnocení logického výrazu si můžeme představit jako zjištění, jestli je pravdivý nebo nepravdivý. U jednoduchého výroku jeho vyhodnocení odpovídá jeho pravdivosti, ale u složitějších výroků s logickými spojkami jde o kombinaci pravdivostí jednotlivých podvýroků pomocí spojek.
Například spojka and se vyhodnotí na pravdu (true, 1) právě tehdy, když jsou oba výroky pravdivé.
Tedy 1 and 1 = 1, ale například 1 and 0 = 0.
Pravdivostní tabulka logických operací
| X | Y | X \text{ and } Y | X \text{ or } Y | X \text{ xor } Y | X \Rightarrow Y | X \Leftrightarrow Y |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 | 1 | 1 |
Úpravy logických výrazů
Úpravy logických výrazů je vhodné provádět například tehdy, když chceme určit pravdivost daného výroku nebo porovnat, jestli jsou dva výroky shodné. K tomu se hodí základní přepisová pravidla.
Přepis základních logických spojek
| Výrok | Ekvivalentní výrok |
|---|---|
| \text{not not } X | X |
| \text{not } (X \text{ and } Y) | (\text{not } X) \text{ or (not } Y) |
| \text{not }(X \text{ or }Y) | (\text{not } X) \text{ and (not } Y) |
Přepis implikace, ekvivalence a operace xor
| Výrok | Ekvivalentní výrok |
|---|---|
| X \Rightarrow Y | (\text{not } X) \text{ or } Y |
| X \Rightarrow Y | (\text{not } Y) \Rightarrow (\text{not } X) |
| X \Leftrightarrow Y | (X \Rightarrow Y) \text{ and } (Y \Rightarrow X) |
| X \Leftrightarrow Y | (X \text{ and } Y) \text{ or (not } X \text{ and not } Y) |
| X \text{ xor } Y | (X \text{ and not } Y) \text{ or (not } X \text{ and } Y) |
| \text{not } (X \Rightarrow Y) | X \text{ and not } Y |
| \text{not } (X \Leftrightarrow Y) | X \text{ xor } Y |
| \text{not } (X \text{ xor } Y) | X \Leftrightarrow Y |
Analogické zákony jako při počítání s čísly
Pro logické operace and a or také platí komutativní (1. a 2. řádek následující tabulky), asociativní (3. a 4. řádek) a distributivní zákony (5. a 6. řádek):
| Výrok | Ekvivalentní výrok |
|---|---|
| X \text{ and } Y | Y \text{ and } X |
| X \text{ or } Y | Y \text{ or } X |
| (X \text{ and }Y) \text{ and } Z | X \text{ and } (Y \text{ and }Z) |
| (X \text{ or } Y) \text{ or } Z | X \text{ or } (Y \text{ or } Z) |
| X \text{ and } (Y \text{ or } Z) | (X \text{ and } Y) \text{ or } (X \text{ and } Z) |
| X \text{ or } (Y \text{ and } Z) | (X \text{ or } Y) \text{ and } (X \text{ or } Z) |
Další cvičení s trochu jinou notací najdete i na umíme matiku.
NahoruLogické odvozování s výrazy
Logické odvozování s pomocí logických výrazů je formální varianta odvozování logických důsledků slovy.
Jde o proces, kdy dostaneme několik logických výrazů (faktů) a odvozujeme z nich jiný výraz (závěr). Nemusíme ale nutně jen odvozovat nové závěry, můžeme se i například pokoušet rozhodnout, jestli nějaký dodaný výrok plyne z jiných.
Říkáme, že výraz se dá odvodit (tedy vyplývá) ze zadaných výrazů právě tehdy, když platí ve všech případech, kdy platí všechny zadané výrazy.
Příklady
- Z výrazu X \text{ and } Y můžeme odvodit X, protože kdykoli platí X \text{ and } Y, musí platit X i Y, a tím spíš musí platit i samotné X.
- Z výrazů X \text{ or } Y a \text{not } X můžeme odvodit Y. Aby bylo splněno X \text{ or } Y, musí platit X nebo Y, ale X platit nemůže. Proto platí Y.
- Z výrazů X \Leftrightarrow Y a X můžeme odvodit Y. Výraz X \Leftrightarrow Y říká, že Y má vždy stejnou hodnotu jako X. Z pravdivosti X tak můžeme odvodit pravdivost Y.
Logické brány
Logické spojky jsou v počítači reprezentovány součástkami, kterým se říká logické brány. Z logických bran se pak dají skládat složitější logické obvody, které dokáží například sčítat nebo násobit čísla.
Příklady logických bran

Negace
Negace se u logických bran značí kolečkem na výstupu. Samotná negace má jeden vstup a jeden výstup, a značí se trojúhelníkem s kolečkem.
Známé spojky and, or a xor mají své vlastní značky a jejich negace se tvoří přidáním kolečka na výstup. Spojka nand značí negaci od and, tedy not and, spojka nor značí negaci od or, tedy not or, a spojka xnor značí negaci od xor, tedy not xor.
NahoruLogické obvody
Logické spojky jsou v počítači reprezentovány součástkami, kterým se říká logické brány. Z logických bran se pak dají skládat složitější logické obvody, které dokáží například sčítat nebo násobit čísla. Logický obvod je složen z více bran takovým způsobem, že výstup jedné brány je použit jako vstup do jiné brány. 
Obvody se dají i kombinovat. Spuštění dvou obvodů zároveň vedle sebe se říká paralelní zapojení obvodů. Spuštění dvou obvodů po sobě tak, že druhý obvod využívá na vstupu výstup z prvního obvodu, se říká sekvenční zapojení obvodů. 
Výstup jednoho obvodu může být použit jako vstup více obvodům. Takové posílání vstupu do dvou směrů se značí plným kolečkem.
Příkladem skládání jednoduchých obvodů do většího je sčítání pomocí obvodů, kdy se například obvod pro sčítání čtyřbitového čísla dá složit jako čtyři jednobitové sčítačky v řadě. 
Bitové operace
Bitové operace spojují logiku s binárním zápisem čísel. Provádějí logické úkony přímo nad jednotlivými bity binárních čísel, podle čehož také dostaly svůj název. Na rozdíl od běžné aritmetiky zde neexistuje žádný „přenos do vyššího řádu“ (carry). Každá pozice v čísle se zpracovává izolovaně. Bitové operace se vyznačují také tím, že nepracují jen s jedním bitem, ale s celou posloupností bitů najednou.
Logické operace
Logické operace jsou typickou ukázkou bitových operací. Mezi nejčastěji používané patří bitová negace (NOT), konjunkce neboli součin (AND), disjunkce neboli součet (OR) a neekvivalence (XOR). Více se logickým spojkám věnuje sekce logiky.
Příklady logických operací
Unární bitová operace NOT vezme jeden binární řetězec a kažou hodnotu v něm změní na opačonu; tedy z každé 0 udělá 1 a z každé 1 udělá 0.
- Z řetězce 10100 udělá řetězec 01011.
- Z řetězce 11111 udělá řetězec 00000.
- Z řetězce 00000 udělá řetězec 11111.
Binární bitové operace vezmou dva řetězce stejné délky a zkombinují je do jednoho nového řetězce bit po bitu:
- Operace AND udělá z řetězců 11010 a 01110 řetězec 01010
- Operace AND udělá z řetězců 11110 a 00110 řetězec 00110
- Operace OR udělá z řetězců 10010 a 00011 řetězec 10011
- Operace OR udělá z řetězců 11110 a 00111 řetězec 11111
- Operace XOR udělá z řetězců 10010 a 00011 řetězec 10001
- Operace XOR udělá z řetězců 11110 a 00111 řetězec 11001
Posuny
Dalším častým druhem operací jsou posuny. Posun, neboli shift, se převádí přidáním nuly na začátek, případně na konec, sekvence bitů a odebráním jednoho bitu z druhé strany řetězce. Posun doprava (>>) tedy přidá nulu na začátek a odebere poslední bit, což pro binární čísla odpovídá celočíselnému dělení dvěma. Posun doleva (<<) naopak přidá nulu na konec řetězce a odebere první bit, což pro binární čísla odpovídá násobení dvěma.
Příklady posunů
Posun doprava (>>) o 1 pozici celočíselně dělí dvěma. Posun o 2 pozice dělí čtyřmi, posun o 3 dělí osmi a tak dále.
- Z čísla 10 udělá číslo 5: 1010 >> 1 = 0101
- Z čísla 4 udělá číslo 2: 0100 >> 1 = 0010
- Z čísla 7 udělá číslo 3: 0111 >> 1 = 0011
- Posun o 2 udělá z čísla 10 číslo 2: 1010 >> 2 = 0010
- Posun o 2 udělá z čísla 7 číslo 1: 0111 >> 2 = 0001
- Posun o 3 udělá z čísla 10 číslo 1: 1010 >> 3 = 0001
Posun doleva (<<) o 1 pozici celočíselně násobí dvěma. Posun o 2 pozice násobí čtyřmi, posun o 3 násobí osmi a tak dále.
- Z čísla 5 udělá číslo 10: 0101 << 1 = 1010
- Z čísla 4 udělá číslo 8: 0100 << 1 = 1000
- Z čísla 7 udělá číslo 14: 0111 << 1 = 1110
- Posun o 2 udělá z čísla 1 číslo 4: 0001 << 2 = 0100
- Posun o 2 udělá z čísla 3 číslo 12: 0011 << 2 = 1100
- Posun o 3 udělá z čísla 1 číslo 8: 0001 << 3 = 1000
Využití
Díky izolovanosti provádění operace na každém bitu zvlášť je v počítači často možné provádět více bitových operací paralelně. Následkem toho je práce s bitovými operacemi velmi rychlá, rychlejší než například sčítání nebo odčítání.
Bitové operace je možné používat na libovolné binární řetězce, nejen na čísla. Například do osmi bitů se dá místo osmibitového čísla uložit 8 indikátorů, takzvaných flagů, nesoucích binární informaci (s hodnotami true nebo false). S těmito flagy je pak možné manipulovat zároveň pomocí binárních operací.
Nahoru