====== XOR (Exclusive OR) ====== **XOR** je logický hradlo (operátor), které porovnává dva vstupy. Jeho výstup je **pravda (1)** pouze tehdy, pokud jsou vstupy **rozdílné**. Pokud jsou vstupy stejné (oba nuly nebo oba jedničky), výsledek je **nepravda (0)**. V matematice a informatice se často značí symbolem $\oplus$. ---- ====== 1. Pravdivostní tabulka (Truth Table) ====== Toto je "bible" chování XORu. Všimněte si, že funguje jako **detektor rozdílů**. ^ Vstup A ^ Vstup B ^ Výstup (A XOR B) ^ Vysvětlení ^ | 0 | 0 | **0** | Jsou stejné. | | 0 | 1 | **1** | Jsou různé. | | 1 | 0 | **1** | Jsou různé. | | 1 | 1 | **0** | Jsou stejné (toto je hlavní rozdíl oproti klasickému OR). | ---- ====== 2. Magická vlastnost: Vratnost ====== To, co dělá XOR tak užitečným pro počítače (a důvod, proč na něm stojí RAID a šifrování), je jeho **reverzibilita**. Pokud vezmete nějakou hodnotu **A** a "zamaskujete" ji hodnotou **B** pomocí XOR, získáte šifru **C**. Pokud tuto šifru **C** znovu "odmaskujete" pomocí stejného **B**, získáte zpět původní **A**. $$ (A \oplus B) \oplus B = A $$ Tato rovnice říká: **Aplikováním XOR dvakrát vrátíte změny zpět.** ---- ====== 3. Praktická využití ====== ===== A. Šifrování dat (Kryptografie) ===== XOR je základem většiny šifrovacích algoritmů (např. proudových šifer). * **Zpráva:** 10110011 (Hello) * **Klíč:** 11111111 * **XOR:** 01001100 (Zašifrovaná změť) Pokud útočník nezná klíč, vidí jen náhodná čísla. Pokud příjemce použije klíč znovu, získá původní zprávu. ===== B. RAID a Obnova dat ===== Jak jsme zmínili u paritního disku: * Disk 1: **1100** * Disk 2: **1010** * Parita (XOR): **0110** Když Disk 1 shoří, systém vezme Disk 2 a Paritu, provede mezi nimi XOR ($1010 \oplus 0110$) a výsledkem je zázračně obsah ztraceného Disku 1 (**1100**). ===== C. Programátorský trik (Swap) ===== Pomocí XOR lze prohodit obsah dvou proměnných bez použití třetí (pomocné) proměnné. x = x ^ y; // Změní x na "mix" obou y = x ^ y; // Změní y na původní x x = x ^ y; // Změní x na původní y ---- ====== XOR v běžném životě (Analogie) ====== Představte si vypínač světla na chodbě, který se ovládá ze dvou míst (schodišťový vypínač). * Pokud jsou oba vypínače v poloze "dole" -> světlo nesvítí (0 XOR 0 = 0). * Pokud jeden přepnete nahoru -> světlo se rozsvítí (1 XOR 0 = 1). * Pokud přepnete i ten druhý nahoru -> světlo zhasne (1 XOR 1 = 0). Světlo svítí jen tehdy, když jsou vypínače v **různých** polohách. ---- //Související pojmy: Parita, RAID, Logické hradlo, Binární soustava, Šifrování, Bitová operace.//