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:

Práci s logickými výroky si můžete dále procvičit i v různých jiných zápisech:

Nahoru

Logické spojky a pravdivostní tabulky

Přejít ke cvičením na toto téma »

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
Nahoru

Vyhodnocování logických výrazů

Přejít ke cvičením na toto téma »

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
Nahoru

Úpravy logických výrazů

Přejít ke cvičením na toto téma »

Ú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.

Nahoru

Logické odvozování s výrazy

Přejít ke cvičením na toto téma »

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.
Nahoru

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.

Nahoru

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ě.

Nahoru

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 1⁠0100 udělá řetězec 0⁠1011.
  • Z řetězce 1⁠1111 udělá řetězec 0⁠0000.
  • Z řetězce 0⁠0000 udělá řetězec 1⁠1111.

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ů 1⁠1010 a 0⁠1110 řetězec 0⁠1010
  • Operace AND udělá z řetězců 1⁠1110 a 0⁠0110 řetězec 0⁠0110
  • Operace OR udělá z řetězců 1⁠0010 a 0⁠0011 řetězec 1⁠0011
  • Operace OR udělá z řetězců 1⁠1110 a 0⁠0111 řetězec 1⁠1111
  • Operace XOR udělá z řetězců 1⁠0010 a 0⁠0011 řetězec 1⁠0001
  • Operace XOR udělá z řetězců 1⁠1110 a 0⁠0111 řetězec 1⁠1001

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
NAPIŠTE NÁM

Děkujeme za vaši zprávu, byla úspěšně odeslána.

Napište nám

Nevíte si rady?

Před položením dotazu si prosím projděte návody:

Prosíme, nezasílejte dotazy na prozrazení řešení úloh či vysvětlení postupu. Pokud hlásíte chybu, upřesněte prosím, v čem přesně spočívá a připojte snímek obrazovky.

Čeho se zpráva týká?

Vzkaz Hlášení chyby Obsah Ovládání Přihlášení Licence