Ako funguje xor. Logické operátory VBA. Schéma na identifikáciu okraja a prerušenia impulzu

C++. Logické operácie. Bitové logické operácie. Posunové operácie. Operácia XOR

1. Pre aké typy možno použiť logické operácie, bitové logické operácie a operácie posunu?

Logické operácie, bitové logické operácie a operácie posunu možno použiť len na operandoch celočíselných typov.

2. Aké logické operácie sa používajú v C/C++?

V programovacom jazyku C/C++ sa používajú nasledujúce logické operácie:

  • && – logické „A“;
  • || – logické „ALEBO“;
  • ! – logické „NIE“.

Výsledkom logických operácií je hodnota false alebo true . V C++ sa false považuje za 0 a true sa považuje za 1.

Z toho môžeme vyvodiť záver, že nepravda< true . Например:

// logické operácie bool res; res = nepravda< true ; // res = true
3. Pravdivosť tabuľka logických operácií

Pravdivá tabuľka logických operácií && (logické „A“), || (logické "ALEBO"), ! (logické „NIE“) má nasledujúci tvar:

V C/C++ sa false považuje za 0 a true nie je 0 (akákoľvek nenulová celočíselná hodnota).

4. Príklady použitia logických operácií v C++

Príklad 1 Logická operácia kombinovaná s booleovským výrazom

// logické operácie bool res; int a, b; // operácia && (AND) a = 8; b = 5; res = a && b; // res = Pravda a = 0; res = a && b; // res = False // operácia || (OR) a = 0; b = 0; res = a || b; // res = False b = 7; res = a || b; // res = Pravda // operácia! (logické "NIE") a = 0; res = !a; // res = Pravda a = 15; res = !a; // res = False

Príklad 2 Logická operácia v podmienených výrazoch. Tu je fragment kódu, v ktorom sa v príkaze if používa logická operácia.

// logické operácie v podmienených výrazoch int a, b; bool res; a = 0; b = 3; res = nepravda ; if (a && b) res = true ; // res = nepravda a = 0; b = 7; if (a || b) res = true ; // res = pravda
5. Aké bitové logické operácie sa používajú v C/C++?

Jazyk C/C++ podporuje nasledujúce bitové logické operácie:

  • & – bitový logický AND (AND);
  • ^ – bitové sčítanie modulo 2 (XOR - exkluzívne OR);
  • | – bitové logické OR (OR);
  • ~ – bitová inverzia (NIE).

Operácie & , ^ , | sú binárne. To znamená, že vyžadujú dva operandy. Bity ktoréhokoľvek operandu sa navzájom porovnávajú takto: pravidlo: Bit na pozícii 0 prvého operandu sa porovnáva s bitom na pozícii 0 druhého operandu. Bit na pozícii 1 prvého operandu sa potom porovná s bitom na pozícii 1 druhého operandu. Toto porovnáva všetky bity celočíselných operandov.

6. Pravdivostná tabuľka bitových logických operácií

Každý bit výsledku je určený na základe dvoch operandov, ktorými sú bity, ako je uvedené v tabuľke.

Inverzia vyžaduje jeden operand napravo od znamienka ~. Výsledok sa získa bitovou inverziou všetkých bitov operandu.

7. Príklad práce s logickými bitovými operáciami

Nech sú uvedené dve čísla 17 a 45 typu unsigned short int. Každé číslo zaberá 1 bajt alebo 8 bitov v pamäti. Nižšie je uvedený príklad, ako prebieha výpočet pre každú bitovú operáciu

Ako je možné vidieť z príkladu, na každom bite sa vykoná špecifikovaná operácia.

8. Aké operácie posunu sa používajú v C/C++?

Jazyk C/C++ obsahuje dve bitové operácie posun:

  • << – posunie hodnotu operandu doľava o určený počet bitov. Operand je umiestnený naľavo od znaku operácie. Počet bitov, ktoré sa majú posunúť, je označený napravo od znamienka operácie;
  • >> – posunie hodnotu operandu doprava o zadaný počet bitov. Operand je umiestnený naľavo od znaku operácie (<<). Počet bitov, ktoré sa majú posunúť, je umiestnený napravo od znamienka operácie.

Vyťahovacie bity sú stratené a nulové bity sú "in". Posúvanie operandov doľava o 1, 2, 3 alebo viac číslic je najrýchlejší spôsob násobenia 2, 4, 8, ... Posúvanie operandov doprava o 1, 2, 3 alebo viac číslic je najrýchlejší spôsob delenia o 2, 4, 8, ...

Ak program vyžaduje operáciu násobenia celočíselných operandov 2, 4, 8 atď. došlo čo najrýchlejšie, je vhodné použiť operáciu posunu vľavo.

To platí aj pre prípady, keď potrebujete rýchlo vydeliť celočíselný operand 2, 4, 8 atď. V týchto prípadoch sa odporúča použiť shift right.

9. Príklady použitia operácií posunu v programe
// Operácie posunu int a; int b; int c; a = 15; b = -5; // posun doľava - násobenie c = a<< 1; // c = a * 2^1 = 30 c = b << 2; // c = b * 2^2 = -20 // pravý posun - delenie c = a >> 3; // c = a / 2^3 = 1 c = b >> 1; // c = b / 2^1 = -3
10. Aký je rozdiel medzi logickými operáciami a bitovými logickými operáciami?

Logické operácie porovnávajú celú hodnotu dvoch operandov. Každý z operandov môže byť pravdivý alebo nepravdivý. Jazyk C/C++ umožňuje porovnávať operandy, ktoré sú celými číslami. V tomto prípade celočíselná hodnota 0 zodpovedá hodnote false a nenulová (akákoľvek iná) hodnota zodpovedá hodnote true .

funkcia, ktorú vykonávajú, je o niečo zložitejšia ako v prípade prvku AND alebo prvku OR. Všetky vstupy brán XOR sú rovnaké, ale žiadny vstup nemôže blokovať ostatné vstupy nastavením výstupu na 1 alebo nulu. Tabuľka 4.1. Tabuľka pravdy dvojvstupové exkluzívne prvky OR
Vstup 1 Vchod 2 VÝCHOD
0 0 0
0 1 1
1 0 1
1 1 0


Ryža. 4.1.

Funkcia Exclusive OR znamená nasledovné: jednička sa objaví na výstupe, keď má jedničku len jeden vstup. Ak sú na vstupoch dve alebo viac jednotiek, alebo ak sú všetky vstupy nulové, výstup bude nula. Tabuľka pravdy dvojvstupový prvok Exclusive OR je uvedený v tabuľke. 4.1. Označenia prijaté v domácich a zahraničných schémach sú znázornené na obr. 4.1. Nápis na domácom označení prvku Exclusive OR "=1" len znamená, že je zvýraznená situácia, keď je na vstupoch len jedna jednotka.

V štandardných sériách je málo prvkov XOR. Domáce série ponúkajú mikroobvody LP5 (štyri dvojvstupové prvky s výstupom 2C), LL3 a LP12, ktoré sa od LP5 líšia výstupom OK. Tieto prvky implementujú príliš špecifickú funkciu.

Z matematického hľadiska prvok XOR vykonáva operáciu takzvaného súčtu modulo-2.. Preto sa tieto prvky nazývajú aj sčítačky modulo-dva. Ako bolo uvedené v predchádzajúcej prednáške, sumačný modul 2 je označený znamienkom plus v kruhu.

Hlavnou aplikáciou prvkov je Exclusive OR, čo priamo vyplýva z pravdivostné tabuľky, pozostáva z porovnávania dvoch vstupných signálov. V prípade, že na vstupy prídu dve jednotky alebo dve nuly (signály sa zhodujú), na výstupe sa vytvorí nula (pozri tabuľku 4.1). Typicky sa v tejto aplikácii aplikuje konštantná úroveň na jeden vstup prvku, s ktorým sa porovnáva časovo premenný signál prichádzajúci na druhý vstup. Ale oveľa častejšie sa na porovnávanie signálov a kódov používajú špeciálne mikroobvody komparátory kódov, o ktorej bude reč v ďalšej prednáške.

Ako sčítačka modulo 2 sa prvok XOR používa aj v paralelných a sériových deličoch modulo 2 používaných na výpočet cyklických kontrolných súčtov. Ale tieto schémy budú podrobne rozoberané v prednáškach 14,15.

Dôležitou aplikáciou prvkov XOR je riadený menič (obr. 4.2). V tomto prípade sa jeden zo vstupov prvku používa ako riadiaci a na vstupe druhého prvku sa prijíma informačný signál. Ak je riadiaci vstup jeden, potom je vstupný signál invertovaný, ale ak je nulový, nie je invertovaný. Častejšie riadiaci signál je nastavená na konštantnú úroveň určujúcu prevádzkový režim prvku a informačný signál je pulzný. To znamená, že prvok XOR môže alebo nemusí zmeniť polaritu vstupného signálu alebo hrany, v závislosti od riadiaci signál.


Ryža. 4.2.

V prípade, že existujú dva signály s rovnakou polaritou (pozitívny alebo negatívny) a ich súčasný príchod je vylúčený, možno použiť prvok Exclusive OR na zmiešanie týchto signálov (obr. 4.3). Pre akúkoľvek polaritu vstupných signálov budú výstupné signály prvku kladné. Pre kladné vstupné signály bude hradlo XOR fungovať ako hradlo 2OR a pre záporné vstupy nahradí hradlo 2AND-NOT. Takéto náhrady môžu byť užitočné v prípadoch, keď niektoré prvky Exclusive OR zostanú v obvode nevyužité. Pravda, treba s tým počítať oneskorenie šírenia Signál v prvku XOR je zvyčajne o niečo väčší (asi 1,5-krát) ako oneskorenie v najjednoduchších prvkoch AND, NAND, OR, NOR.

V praxi sa najčastejšie používajú dvojvstupové prvky „exkluzívny OR“. Na obr. Obrázok 1 znázorňuje konvenčné grafické označenie prvku bez inverzie a tabuľku jeho stavov. Jednoducho povedané, podstata tohto prvku sa scvrkáva na nasledovné: výstupný signál sa objaví iba vtedy, keď logické úrovne na vstupoch nie sú rovnaké.

Schéma na identifikáciu okraja a prerušenia impulzu

V tomto obvode sa na oneskorenie impulzov používajú tri brány XOR. DD1.4 - súčet. Výstupné impulzy majú stabilné nábehové a zostupné hrany. Trvanie každého výstupného impulzu sa rovná trojnásobku času oneskorenia spínania každého z troch prvkov. Časový interval medzi okrajmi výstupných impulzov sa rovná trvaniu vstupného impulzu. Toto zariadenie tiež zdvojnásobuje frekvenciu vstupného signálu.

Existuje ďalšia zaujímavá nehnuteľnosť s názvom „Exclusive OR“. Ak sa na jeden zo vstupov použije konštanta „0“, signál na výstupe prvku zopakuje vstupný signál a ak sa konštanta „0“ zmení na konštantu „1“, výstupný signál bude už byť inverziou vstupného signálu.

Niekedy je potrebné získať „exkluzívne OR“ hradlo z jednotlivých štandardných logických brán. Príkladom je obvod prvku „exkluzívny OR“ implementovaný na štyroch prvkoch 2-AND-NOT. Obrázok 3 zobrazuje obvod XOR v jeho štyroch stavoch. Toto zobrazuje všetky možné logické úrovne na každom z použitých 2-NAND logických brán.

Takéto prvky sú zahrnuté v diagrame. V tomto obvode je prvok „Exclusive OR“ vyrobený zo štyroch prvkov 2-A-NOT, ktoré sú súčasťou jedného balenia mikroobvodu K561LA7.

Diskrétny generátor signálu s rozdielovou frekvenciou

Obvod ovládača je znázornený na obrázku 4. Tu je exkluzívny logický prvok OR tiež implementovaný na štyroch prvkoch 2-AND-NOT.

Obdĺžnikové impulzy dopadajú na vstupy 1 a 2 tvarovača (pozri grafy 1 a 2), ktoré sa líšia frekvenciou opakovania. Uzol založený na logických prvkoch DD1.1-DDI.4 tieto signály znásobuje. Výstupný impulzný signál (graf 3) z prvku DD1.4 je privedený do integračného obvodu R3, C1, ktorý ho premení na trojuholníkový signál (graf 4) s frekvenciou rovnou rozdielu frekvencií vstupných signálov a op-amp DA1 konvertuje prijímaný signál na štvorcovú vlnu (pozri plán 5). Rezistor R1 reguluje trvanie kladných a záporných polvĺn výstupného signálu. Veľmi zaujímavá schéma. Rádiový dizajnér má o čom premýšľať. Napríklad signál zobrazený v treťom grafe je sínusový signál PWM.
Samozrejme, rozsah použitia prvkov “exkluzívneho OR” je oveľa širší. Predstavil som tu podľa mňa zaujímavejšie pre rádioamatérov.

V tomto článku budeme hovoriť o niektorých bitových operáciách. Pozrime sa na tie hlavné: XOR (exkluzívne OR), AND, NOT a OR.

Ako je známe, minimálna jednotka merania informácií je trocha, ktorý ukladá jednu z 2 hodnôt: 0 ( Nepravdivé, nepravda) alebo 1 ( Pravda, pravda). Bitová bunka teda môže byť súčasne iba v jednom z dvoch možných stavov.

Na manipuláciu s bitmi sa používajú určité operácie - logické alebo boolovské. Môžu byť aplikované na akýkoľvek bit, bez ohľadu na to, či je jeho hodnota nula alebo jedna. Nuž, pozrime sa na príklady použitia troch základných logických operácií.

Logická operácia AND (a)

A označené &.

Operátor AND sa vykonáva na 2 bitoch, zoberme si napríklad a a b. Výsledok operácie AND je 1, ak sa a a b rovnajú 1. V opačnom prípade je výsledok 0. Napríklad pomocou AND môžete zistiť, či je číslo párne alebo nie.

Pozrite sa na pravdivostnú tabuľku operácie AND:

Logická operácia ALEBO (ALEBO)

Označené | .

Operátor ALEBO urobené aj s 2 bitmi (a a b). Výsledok je 0, ak a a b sú 0, inak je 1. Pozrite sa na pravdivostnú tabuľku.

Logická operácia XOR (exkluzívne OR)

Operátor XOR je označený ^.

XOR vykonávané s 2 bitmi (a a b). Výsledok operácie XOR ( výhradné OR) je 1, keď jeden z bitov b alebo a je 1. V opačnom prípade je výsledok použitia operátora XOR 0.

Tabuľka pravdy logickej operácie pre XOR (exkluzívny OR) vyzerá takto:

Pomocou XOR (exkluzívne OR) môžete zmeniť hodnoty 2 premenných rovnakého typu údajov bez použitia dočasnej premennej. Text môžete šifrovať aj pomocou XOR, napríklad:

String msg = "Toto je správa"; char message = msg.toCharArray(); Kľúč reťazca = ".*)"; String encryptedString = new String(); for(int i = 0; i< message.length; i++){ encryptedString += message[i]^key.toCharArray(); }

Súhlasím, že XOR je ďaleko od najspoľahlivejšej metódy šifrovania, ale to neznamená, že nemôže byť súčasťou žiadneho šifrovacieho algoritmu.

Logická operácia NIE (NIE)

Toto je bitová negácia, takže sa vykonáva s jedným bitom a označuje sa ~ .

Výsledok závisí od stavu bitu. Ak je v nulovom stave, tak výsledok operácie je jedna a naopak. Všetko je mimoriadne jednoduché.

Tieto 4 logické operácie si treba zapamätať ako prvé, pretože s ich pomocou môžete získať takmer akýkoľvek možný výsledok. Existujú aj prevádzky ako napr<< (побитовый сдвиг влево) и >> (bitový posun doprava).

Inštrukcia XOR v jazyku assembler vykonáva exkluzívnu operáciu OR medzi všetkými bitmi dvoch operandov. Výsledok operácie XOR sa zapíše do prvého operandu. Syntax:

XOR PRIJÍMAČ, ZDROJ

Inštrukcia XOR vždy resetuje CF a OF a tiež (v závislosti od výsledku) zmení príznaky SF, ZF a PF. Hodnota príznaku AF môže byť ľubovoľná – nezávisí od výsledku operácie.

PRIJÍMAČ môže byť jeden z nasledujúcich:

  • Oblasť pamäte (MEM)

ZDROJ môže byť jeden z nasledujúcich:

  • Oblasť pamäte (MEM)
  • Všeobecný register (REG)
  • Okamžitá hodnota – konštanta (IMM)

S výhradou obmedzení popísaných vyššie môžu byť kombinácie PRIJÍMAČ-ZDROJ nasledovné:

REG, MEM MEM, REG REG, REG MEM, IMM REG, IMM

Výhradná prevádzka OR

Pri vykonávaní operácie výhradného OR bude výsledná hodnota 1, ak sú porovnávané bity odlišné (nie rovnaké). Ak majú porovnávané bity rovnakú hodnotu, výsledok bude 0.

Preto sa táto operácia nazýva exkluzívna. Z porovnávania vylučuje identické bity a vykonáva operáciu na nerovnakých bitoch.

Ale keďže každý pár nerovnakých bitov je 0 a 1, výsledkom logickej operácie OR bude 1.

Exkluzívna OR pravdivostná tabuľka

Tabuľka pravdy XOR je uvedená nižšie:

0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0

Vlastnosti operácie XOR

Operácia XOR má vlastnosť reverzibility. Ak sa vykoná dvakrát s rovnakým operandom, výsledná hodnota sa obráti. To znamená, ak túto operáciu vykonáte dvakrát medzi bitmi X A Y, potom v konečnom výsledku dostaneme pôvodnú bitovú hodnotu X.

0 XOR 0 = 0 XOR 0 = 0 0 XOR 1 = 1 XOR 1 = 0 1 XOR 0 = 1 XOR 0 = 1 1 XOR 1 = 0 XOR 1 = 1

Túto vlastnosť je možné využiť napríklad na jednoduché šifrovanie dát (o tom niekedy inokedy).

Kontrola príznaku parity po operácii XOR

Príkaz XOR pracuje s 8-, 16- a 32-bitovými operáciami.

Niekedy je potrebné po vykonaní operácie skontrolovať príznak parity PF, aby sa zistilo, koľko jedniných bitov (párnych alebo nepárnych) obsahuje nízky bajt výsledok (je to potrebné nielen pri vykonávaní operácie XOR, ale aj pri vykonávaní iných aritmetických a logických operácií).

Ak je nastavený príznak parity, výsledkom je párny počet jeden bitov. V opačnom prípade bude príznak resetovaný.

Môžete tiež jednoducho skontrolovať paritu ľubovoľného čísla bez zmeny hodnoty výsledku. Ak to chcete urobiť, musíte vykonať príkaz XOR s nulovou hodnotou. To znamená, že PRIJÍMAČ musí obsahovať testované číslo a ZDROJ musí obsahovať nulu. A potom musíte skontrolovať príznak parity. Príklad:

AL, 10110101b ;Umiestnite do AL číslo s nepárnym;počet jedna bitov (5) XOR AL, 0 ;V tomto prípade paritný príznak PF nie je nastavený;nastavte (PO) MOV AL, 10110111b ;Umiestnite do AL číslo s párnym;počet jeden bitov (6 ) XOR AL, 0 ;V tomto prípade sa nastaví príznak parity PF ;(PE)

V debuggeroch sa zvyčajne používa skratka PE (Parity Even) na označenie párneho počtu jednotiek vo výslednom výsledku a PO (Parity Odd) pre nepárne číslo.

Parita v 16-bitových slovách

Ako už bolo spomenuté, príznak parity sa nastavuje v závislosti od počtu jednotiek obsiahnutých v spodnom byte výsledku. Ak chcete skontrolovať paritu 16-bitového operandu, musíte vykonať XOR vysoký a nízky bajt čísla:

MOV AX, 64C1h ;0110 0100 1100 0001 - 6 jednobitov XOR AH, AL ;Nastaví sa príznak parity

Týmto jednoduchým spôsobom sa 16-bitový operand rozdelí na dva bajty (2 skupiny po 8 bitov) a pri vykonávaní príkazu XOR sa nebudú brať do úvahy prvé bity nachádzajúce sa v zodpovedajúcich bitoch dvoch 8-bitových operandov. účtu. Pretože zodpovedajúci bit výsledku je nula.

Inštrukcia XOR odstráni z výsledku všetky prekrývajúce sa bity dvoch 8-bitových operandov a k výsledku pridá jeden disjunktný bit. To znamená, že parita 8-bitového čísla, ktoré dostaneme, bude rovnaká ako parita pôvodného 16-bitového čísla.

0110 0100 1100 0001 - pôvodné 16-bitové číslo 0 XOR 1 = 1 1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 0 = 0 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 0 = 0 0 XOR 1 = 1

Výsledkom sú 4 jednotky, to znamená, že sa nastaví príznak PF

Parita v 32-bitových dvojitých slovách

Čo ak potrebujete určiť paritu 32-bitového čísla?

Potom sa číslo rozdelí na štyri bajty a na týchto bajtoch sa jeden po druhom vykoná operácia exkluzívneho OR.

Napríklad rozdelíme 32-bitové číslo B o štyri bajty B0, B1, B2, B3, Kde B0- toto je nízky bajt.

Potom na určenie parity čísla B budeme musieť použiť nasledujúci vzorec:

B0 XOR B1 XOR B2 XOR B3

Ale v assembleri takýto zápis nie je povolený. Takže budete musieť trochu premýšľať.

A nakoniec o pôvode mnemotechnických pomôcok XOR. V angličtine existuje slovo e X recepcia - výnimka. Skratka tohto slova je písmeno X(tak sa to stalo). Určite ste to videli v reklame alebo v názvoch produktov, ktorých výrobcovia tvrdia (alebo si myslia, že tvrdia) exkluzivitu. Napríklad Lada XRAY, Sony XPeria atď. XOR je teda skratka zložená z dvoch slov – napr X recepcia ALEBO- exkluzívne OR.

Pokračovanie v téme:
Zariadenia

Ľvovská národná univerzita pomenovaná po. I. Franko (LNU) - ďalšie informácie o vysokej škole Všeobecné informácie Ľvovská národná univerzita pomenovaná po Ivanovi...