X sau prin operatii de baza. Operații logice de bază (și, sau, xor, nu)

Acasă / Dispozitivele mobile

În acest articol vă voi spune cum funcționează operațiunile cu biți. La prima vedere, ți se pot părea complicate și inutile, dar în realitate nu este deloc așa. De asta voi încerca să vă conving.

Introducere

Operatorii pe biți operează direct pe biții unui număr, astfel încât numerele din exemple vor fi în binar.

Voi acoperi următorii operatori pe biți:

  • | (SAU pe biți),
  • & (pe bit ȘI (ȘI)),
  • ^ (SAU exclusiv (XOR)),
  • ~ (Negație pe biți (NU)),
  • << (Побитовый сдвиг влево),
  • >> (Deplasare pe biți la dreapta).

Operațiile pe biți sunt studiate în matematică discretă și formează, de asemenea, baza tehnologiei digitale, deoarece logica funcționării porților logice, elementele de bază ale circuitelor digitale, se bazează pe acestea. În matematica discretă, ca și în ingineria digitală, tabelele de adevăr sunt folosite pentru a descrie funcționarea lor. Tabelele de adevăr, mi se pare, facilitează foarte mult înțelegerea operațiilor pe biți, așa că le voi prezenta în acest articol. Ele sunt, totuși, aproape niciodată folosite în explicațiile operatorilor pe biți în limbaje de programare de nivel înalt.

De asemenea, trebuie să știți despre operatorii de biți:

  1. Unii operatori pe biți sunt similari cu operatorii cu care probabil ești familiarizat (&&, ||). Acest lucru se datorează faptului că sunt de fapt similare în anumite privințe. Cu toate acestea, ele nu trebuie confundate sub nicio formă.
  2. Majoritatea operațiunilor pe biți sunt operații de atribuire compusă.

SAU pe biți

SAU pe biți funcționează echivalent cu SAU logic, dar aplicat fiecărei perechi de biți a unui număr binar. Bitul binar al rezultatului este 0 numai atunci când ambii biți corespunzători sunt 0. În toate celelalte cazuri, rezultatul binar este 1. Adică, dacă avem următorul tabel de adevăr:

38 | 53 va fi astfel:

O 0 0 1 0 0 1 1 0
B 0 0 1 1 0 1 0 1
A | B 0 0 1 1 0 1 1 1

Ca rezultat, obținem 110111 2 sau 55 10.

ȘI pe biți

ȘI pe biți este un fel de operație opusă a SAU pe biți. Cifra binară a rezultatului este 1 numai atunci când ambii biți corespunzători operanzilor sunt egali cu 1. Cu alte cuvinte, putem spune că cifrele binare ale numărului rezultat sunt rezultatul înmulțirii biților corespunzători ai operandului: 1x1 = 1, 1x0 = 0. Următorul tabel de adevăr corespunde SI pe biți:

Un exemplu de lucru cu AND pe biți la expresia 38 și 53:

O 0 0 1 0 0 1 1 0
B 0 0 1 1 0 1 0 1
A&B 0 0 1 0 0 1 0 0

Ca rezultat, obținem 100100 2 sau 36 10.

Puteți utiliza operatorul AND pe biți pentru a verifica dacă un număr este par sau impar. Pentru numere întregi, dacă bitul cel mai puțin semnificativ este 1, atunci numărul este impar (pe baza conversiei binar în zecimal). De ce este necesar acest lucru dacă puteți utiliza doar %2? Pe computerul meu, de exemplu, &1 rulează cu 66% mai rapid. O creștere destul de plăcută a performanței, să vă spun.

SAU exclusiv (XOR)

Diferența dintre XOR și OR pe biți este că pentru a produce un 1, doar un bit dintr-o pereche poate fi un 1:

De exemplu, expresia 138^43 va fi egală cu...

O 1 0 0 0 1 0 1 0
B 0 0 1 0 1 0 1 1
A^B 1 0 1 0 0 0 0 1

… 10100001 2 sau 160 10

Folosind ^ puteți modifica valorile a două variabile (având același tip de date) fără a utiliza o variabilă temporară.

De asemenea, puteți cripta text folosind SAU exclusiv. Pentru a face acest lucru, trebuie doar să iterați toate caracterele și ^ le cu caracterul cheie. Pentru un cifr mai complex, puteți utiliza un șir de caractere:

String msg = "Acesta este un mesaj"; mesajul char = msg.toCharArray(); Cheie șir = „.*)”; String encryptedString = String nou(); for(int i = 0; i< message.length; i++){ encryptedString += message[i]^key.toCharArray(); }

XOR nu este cea mai sigură metodă de criptare, dar poate fi făcută parte din algoritmul de criptare.

Negație pe biți (NU)

Negația pe biți inversează toți biții operandului. Adică ceea ce era 1 va deveni 0 și invers.

De exemplu, aici este operația ~52:

O 0 0 1 1 0 1 0 0
~A 1 1 0 0 1 0 1 1

Rezultatul va fi 203 10

Când utilizați negația pe biți, semnul rezultatului va fi întotdeauna semnul opus al numărului original (când se lucrează cu numere semnate). Aflați de ce se întâmplă acest lucru chiar acum.

Cod suplimentar

Aici ar trebui să vă spun puțin despre modul de reprezentare a numerelor întregi negative într-un computer, și anume despre codul de complement al celor doi. Fără a intra în detalii, este necesar să se faciliteze aritmetica numerelor binare.

Principalul lucru pe care trebuie să-l știți despre numerele scrise în complement a doi este că bitul cel mai semnificativ este semnat. Dacă este 0, atunci numărul este pozitiv și coincide cu reprezentarea acestui număr în cod direct, iar dacă 1, atunci este negativ. Adică, 10111101 este un număr negativ, iar 01000011 este un număr pozitiv.

Pentru a converti un număr negativ în complementul lui doi, trebuie să inversați toți biții numărului (în esență folosind negația pe biți) și să adăugați 1 la rezultat.

De exemplu, dacă avem 109:

O 0 1 1 0 1 1 0 1
~A 1 0 0 1 0 0 1 0
~A+1 1 0 0 1 0 0 1 1

Cu metoda de mai sus obținem -109 în codul complement a doi.
Tocmai a fost prezentată o explicație foarte simplificată a codului suplimentar și vă încurajez cu tărie să studiați acest subiect mai detaliat.

Deplasare pe biți la stânga

Deplasările de biți sunt ușor diferite de operațiunile pe biți discutate mai devreme. O deplasare la stânga pe biți mută biții operandului său N număr de biți la stânga, începând cu bitul cel mai puțin semnificativ. Spațiile goale după schimbare sunt umplute cu zerouri. Se intampla asa:

O 1 0 1 1 0 1 0 0
O<<2 1 1 0 1 0 0 0 0

O caracteristică interesantă a deplasării la stânga cu N poziții este că este echivalentă cu înmulțirea numărului cu 2 N . Deci 43<<4 == 43*Math.pow(2,4) . Использование сдвига влево вместо Math.pow обеспечит неплохой прирост производительности.

Deplasare pe biți la dreapta

După cum ați putea ghici, >> mută biții operandului cu un număr specificat de biți spre dreapta.

Dacă operandul este pozitiv, atunci spațiile goale sunt umplute cu zerouri. Dacă inițial lucrăm cu un număr negativ, atunci toate spațiile goale din stânga sunt umplute cu unele. Acest lucru se face pentru a păstra semnul conform codului suplimentar explicat mai devreme.

Deoarece deplasarea pe biți la dreapta este operația opusă a deplasării pe biți la stânga, este ușor de ghicit că deplasarea unui număr la dreapta cu N număr de poziții împarte și acel număr la 2 N. Din nou, aceasta este mult mai rapidă decât diviziunea normală.

Concluzie

Deci acum știți mai multe despre operațiunile cu biți și nu vă temeți de ele. Pot presupune că nu veți folosi >>1 de fiecare dată când împărțiți la 2. Cu toate acestea, operațiunile cu biți sunt bine să aveți în arsenalul dvs., iar acum le puteți folosi dacă este necesar sau puteți răspunde la o întrebare complicată de interviu.

Adesea, pentru a demonstra capacitățile limitate ale perceptronilor cu un singur strat atunci când rezolvă probleme, aceștia recurg la luarea în considerare a așa-numitei probleme. XOR – OR exclusiv.

Esența sarcinii este următoarea. Este dată funcția logică XOR - SAU exclusiv. Este o funcție a două argumente, fiecare dintre acestea putând fi zero sau unul. Ia valoarea , când unul dintre argumente este egal cu unul, dar nu ambele, în caz contrar. Problema poate fi ilustrată folosind un sistem cu un singur strat, un singur neuron, cu două intrări, prezentat în figura de mai jos.

Să notăm o intrare cu , iar cealaltă cu , atunci toate combinațiile lor posibile vor consta din patru puncte pe plan. Tabelul de mai jos arată relația necesară dintre intrări și ieșiri, unde combinațiile de intrări care ar trebui să producă o ieșire zero sunt etichetate și , o singură ieșire este etichetată și .

Puncte Sens Sens Ieșire necesară
0 0 0
1 0 1
0 1 1
1 1 0

Un neuron cu două intrări poate forma o suprafață de decizie sub forma unei linii drepte arbitrare. Pentru ca rețeaua să implementeze funcția XOR specificată în tabelul de mai sus, trebuie să poziționați linia astfel încât punctele să fie pe o parte a liniei și punctele pe cealaltă parte. După ce am încercat să trasăm o astfel de linie dreaptă în figura de mai jos, suntem convinși că acest lucru este imposibil. Aceasta înseamnă că indiferent de ce valori sunt atribuite greutăților și pragului, o rețea neuronală cu un singur strat nu poate reproduce relația dintre intrare și ieșire necesară pentru a reprezenta funcția XOR.

Cu toate acestea, funcția XOR este ușor formată dintr-o rețea cu două straturi și în multe feluri. Să luăm în considerare una dintre aceste metode. Să modernizăm rețeaua din figură adăugând un alt strat ascuns de neuroni:

Rețineți că această rețea dat ca atare, i.e. putem presupune că a fost deja instruită. Numerele de deasupra săgeților arată valorile greutăților sinaptice. Ca funcție de activare, vom folosi o singură funcție de salt cu un prag având următorul grafic:

Apoi rezultatul funcționării unei astfel de rețele neuronale poate fi prezentat sub forma următorului tabel:

Puncte Sens Sens Ieșire necesară
0 0 0 0 0 0
1 0 1 1 0 1
0 1 1 0 1 1
1 1 0 0 0 0

Fiecare dintre cei doi neuroni ai primului strat formează o suprafață de decizie sub forma unei linii drepte arbitrare (împarte planul în două semiplane), iar neuronul stratului de ieșire combină aceste două soluții, formând o suprafață de decizie în forma unei benzi formate din linii drepte paralele ale neuronilor primului strat:

Rețeaua neuronală folosită în acest articol pentru a rezolva problema XOR este primitivă și nu profită pe deplin de capacitățile rețelelor multistrat. Evident, multistrat rețele neuronale au o putere de reprezentare mai mare decât cele cu un singur strat numai în prezența neliniarității. Și în această rețea, se aplică o funcție de activare liniară de prag. O astfel de rețea nu poate fi antrenată, de exemplu, folosind un algoritm de backpropagation.

Absolut toate microcircuitele digitale constau din aceleași elemente logice - „blocurile de construcție” ale oricărui nod digital. Despre asta vom vorbi acum.

Element logic- Acesta este un circuit care are mai multe intrări și o ieșire. Fiecare stare a semnalelor la intrări corespunde unui semnal specific la ieșire.

Deci care sunt elementele?

Elementul „ȘI”

Altfel se numește „conjunctor”.

Pentru a înțelege cum funcționează, trebuie să desenați un tabel care enumeră stările de ieșire pentru orice combinație de semnale de intrare. Acest tabel se numește „ tabelul de adevăr" Tabelele de adevăr sunt utilizate pe scară largă în tehnologia digitală pentru a descrie funcționarea circuitelor logice.

Iată cum arată elementul „ȘI” și tabelul său de adevăr:

Deoarece va trebui să comunicați atât cu tehnologia rusă, cât și cu cea burgheză. documentație, voi furniza simboluri grafice simbolice (GID) ale elementelor atât conform standardelor noastre, cât și al celor care nu sunt.

Ne uităm la tabelul de adevăr și clarificăm principiul din creierul nostru. Nu este greu de înțeles: o unitate la ieșirea elementului „ȘI” apare numai atunci când unitățile sunt furnizate la ambele intrări. Astfel se explică numele elementului: unitățile trebuie să fie atât pe una cât și pe cealaltă intrare.

Dacă o privim puțin diferit, putem spune acest lucru: ieșirea elementului „ȘI” va fi zero dacă zero este aplicat la cel puțin una dintre intrările sale. Să ne amintim. Să mergem mai departe.

element SAU

În alt fel, el este numit „disjunctor”.

Admirăm:

Din nou, numele vorbește de la sine.

O unitate apare la ieșire atunci când o unitate este aplicată la una SAU la alta SAU la ambele intrări simultan. Acest element poate fi numit și elementul „ȘI” pentru logica negativă: un zero la ieșirea sa apare numai dacă zerouri sunt furnizate atât uneia, cât și celei de-a doua intrări.

element NOTĂ

Mai des, se numește „invertor”.

Trebuie să spun ceva despre munca lui?

element NAND

Poarta NAND funcționează exact la fel ca și poarta AND, doar semnalul de ieșire este complet opus. Acolo unde elementul „ȘI” ar trebui să aibă o ieșire „0”, elementul „ȘI-NU” ar trebui să aibă unul. Și invers. Acest lucru este ușor de înțeles din circuitul echivalent al elementului:

Elementul „NOR” (NOR)

Aceeași poveste - un element „SAU” cu un invertor la ieșire.

Următorul tovarăș este puțin mai viclean:
Element SAU exclusiv (XOR)

El este asa:

Operația pe care o efectuează este adesea numită „adăugare modulo 2”. De fapt, sumatoarele digitale sunt construite pe aceste elemente.

Să ne uităm la tabelul adevărului. Când este unitatea de ieșire? Corect: când intrările au semnale diferite. Pe unul - 1, pe celălalt - 0. Așa este și el.

Circuitul echivalent este cam așa:

Nu este necesar să-l memorezi.

De fapt, acestea sunt principalele elemente logice. Absolut orice microcircuite digitale sunt construite pe baza lor. Chiar și Pentium-ul tău preferat.

Și în sfârșit, câteva microcircuite care conțin elemente digitale. Numerele picioarelor corespunzătoare ale microcircuitului sunt indicate lângă bornele elementelor. Toate jetoanele enumerate aici au 14 picioare. Alimentarea este furnizată la picioarele 7 (-) și 14 (+). Tensiune de alimentare – vezi tabelul din paragraful anterior.

Indicat prin figura de stil „ori... sau...” Afirmația compusă „ori A sau B” este adevărată atunci când fie A, fie B este adevărată, dar nu ambele; V altfel afirmația compusă este falsă.

Aceste. rezultatul este adevărat (egal cu 1), Dacă A nu este egal cu B (A≠B).

Această operație este adesea comparată cu disjuncția deoarece sunt foarte asemănătoare ca proprietăți și ambele au asemănări cu conjuncția „sau” din vorbirea de zi cu zi. Comparați regulile pentru aceste operațiuni:

1. adevărat dacă adevărat sau , sau ambele deodată.

2. adevărat dacă adevărat sau, Dar Nu ambele deodată.

Operațiunea exclude cea din urmă opțiune („ambele deodată”) și din acest motiv se numește exclusiv „SAU”. Ambiguitate limbajul natural este că conjuncția „sau” poate fi folosită în ambele cazuri.

5. Implicație (consecință logică) se formează prin combinarea a două enunțuri într-unul singur folosind figura de stil „dacă ... atunci ....”.

Înregistrare: A®B

O afirmație compusă formată prin operația de implicare este falsă dacă și numai dacă dintr-o premisă adevărată (prima afirmație) rezultă o concluzie falsă (a doua afirmație).

Aceste. dacă 1 implică 0, atunci rezultatul este 0, în alte cazuri – 1.

De exemplu, afirmația „Dacă un număr este divizibil cu 10, atunci este divizibil cu 5” este adevărată deoarece atât prima cât și a doua afirmație sunt adevărate.

Afirmația „Dacă un număr este divizibil cu 10, atunci este divizibil cu 3” este falsă deoarece dintr-o premisă adevărată se trage o concluzie falsă.

„Acest patrulater este un pătrat” (O) Și „Un cerc poate fi circumscris în jurul unui patrulater dat” (ÎN). Apoi declarația compusă se citește ca „Dacă un patrulater dat este un pătrat, atunci poate fi desenat un cerc în jurul lui.”

În vorbirea obișnuită conjunctivul "daca... atunci" descrie relația cauză-efect dintre enunțuri. Dar în operațiile logice sensul enunțurilor nu este luat în considerare. Se ia în considerare doar adevărul sau falsitatea lor. Prin urmare, nu ar trebui să ne fie stânjenit de „nesensul” implicațiilor formate din afirmații care nu sunt complet legate de conținut. De exemplu, așa: „dacă președintele Statelor Unite este democrat, atunci există girafe în Africa”, „dacă un pepene verde este o boabă, atunci este benzină în benzinărie”.

6. Echivalența (egalitatea logică, ~ º Û) se formează prin combinarea a două enunțuri într-unul singur folosind figura de stil „...dacă și numai dacă...”

O afirmație compusă formată dintr-o operație de echivalență este adevărată dacă și numai dacă ambele afirmații sunt simultan false sau adevărate.

De exemplu, afirmațiile „Un computer poate calcula dacă și numai dacă este pornit” și „Un computer nu poate calcula dacă și numai dacă nu este pornit” sunt adevărate deoarece ambele afirmații simple sunt adevărate simultan.


Tabelele de adevăr

Pentru fiecare afirmație compusă (funcție logică), este posibil să se construiască un tabel de adevăr care determină adevărul sau falsitatea acestuia pentru toate combinațiile posibile ale valorilor inițiale ale afirmațiilor simple.

Tabelul adevărului aceasta este o vedere de masă circuit logic(operații), care listează toate combinațiile posibile ale valorilor de adevăr ale semnalelor de intrare (operanzi) împreună cu valoarea de adevăr a semnalului de ieșire (rezultatul operației) pentru fiecare dintre aceste combinații.

Să reflectăm cele discutate mai sus operatii logiceîn tabelul de adevăr:

În algebra propozițională, toate funcțiile logice prin transformări logice pot fi reduse la trei de bază: adunare logică, înmulțire logică și negație logică.

Să demonstrăm că operația de implicare A®B este echivalentă cu expresia logică:

Operația OR exclusiv (neechivalență, adăugare modulo doi) este notă cu un simbol și diferă de OR logic doar când A=1 și B=1.

Astfel, disparitatea a două afirmații X1 și X2 se numește afirmație Y care este adevărată dacă și numai dacă una dintre aceste afirmații este adevărată, iar cealaltă este falsă.

Definiția acestei operații poate fi scrisă sub forma unui tabel de adevăr (Tabelul 6):

Tabelul 6 – Tabelul de adevăr al operațiunii „SAU EXCLUSIV”.

După cum se poate observa din Tabelul 6, logica funcționării elementului corespunde numelui său.

Acesta este același element „SAU” cu o mică diferență. Dacă valoarea la ambele intrări este egală cu una logică, atunci rezultatul elementului „SAU EXCLUSIV”, spre deosebire de elementul „SAU”, nu este unul, ci zero.

Operația EXCLUSIVE SAU compară de fapt două cifre binare pentru o potrivire.

Fiecare conjunctiv logic este considerat ca o operație pe instrucțiuni logice și are propriul nume și denumire (Tabelul 7).

Tabelul 7 - Operații logice de bază

Desemnare

operațiuni

Lectură

Numele operațiunii

Denumiri alternative

Negație (inversare)

Linie în partea de sus

Conjuncție (înmulțire logică)

Disjuncție (adăugare logică)

Dacă... atunci

Implicare

Atunci și numai atunci

Echivalenţă

Ori... ori

SAU EXCLUSIV (adăugare modulo 2)

  1. Ordinea operațiilor logice într-o expresie logică complexă

Sistemul de operații logice de inversare, conjuncție și disjuncție vă permite să construiți în mod arbitrar complexe expresie logică.

La calcularea valorii unei expresii logice se adoptă o anumită ordine a operațiilor logice.

1. Inversiunea.

2. Conjuncție.

3. Disjuncția.

4. Implicație.

5. Echivalența.

Parantezele sunt folosite pentru a modifica ordinea specificată a operațiilor.

  1. Expresii logice și tabele de adevăr

    1. Expresii booleene

Fiecare declarație compusă poate fi exprimată sub forma unei formule (expresie logică), care include variabile logice, care denotă enunțuri și semne de operații logice, care denotă funcții logice.

Pentru a scrie un enunț compus sub forma unei expresii logice într-un limbaj formal (limbajul algebrei logicii), într-un enunț compus este necesar să se identifice enunțuri simple și conexiuni logice între ele.

Să scriem sub forma unei expresii logice enunțul compus „(2·2=5 sau 2∙2=4) și (2∙2≠5 sau 2∙ 2 4)".

Să analizăm afirmația compusă. Conține două afirmații simple:

A = „2 2=5” - fals (0),

B = „2 2=4” - adevărat (1).

Atunci declarația compusă poate fi scrisă în următoarea formă:

«( OsauÎN) și (Â sauÎN)».

Acum trebuie să scrieți declarația sub forma unei expresii logice, ținând cont de succesiunea operațiilor logice. La efectuarea operațiilor logice, este definită următoarea ordine de execuție a acestora:

inversare, conjuncție, disjuncție.

Parantezele pot fi folosite pentru a modifica ordinea specificată:

F = (OvÎN) & (Ā vÎN).

Adevărul sau falsitatea enunțurilor compuse poate fi determinat pur formal, ghidat de legile algebrei propoziționale, fără a se face referire la conținutul semantic al enunțurilor.

Să substituim valorile variabilelor logice în expresia logică și, folosind tabelele de adevăr ale operațiilor logice de bază, obținem valoarea funcției logice:

F= (A v B) & ( Ā v B) = (0 v 1) și (1 v 0) = 1 și 1 = 1.

      Tabelele de adevăr

Tabelele în care operațiile logice reflectă rezultatele calculelor afirmațiilor complexe pentru diferite valori ale afirmațiilor simple originale sunt numite tabele de adevăr.

Declarațiile simple sunt notate prin variabile (de exemplu, A și B).

Când construiți tabele de adevăr, este recomandabil să vă ghidați după o anumită secvență de acțiuni:

    este necesar să se determine numărul de rânduri din tabelul de adevăr. Este egal cu cantitatea combinatii posibile valorile variabilelor logice incluse într-o expresie logică. Dacă numărul de variabile logice este egal p, Că:

numărul de linii = 2 n .

În cazul nostru, funcția logică

are 2 variabile și de aceea numărul de rânduri din tabelul de adevăr trebuie să fie 4;

    este necesar să se determine numărul de coloane din tabelul de adevăr, care este egal cu numărul de variabile logice plus numărul de operații logice.

În cazul nostru, numărul de variabile este de două: A și B, iar numărul de operații logice este de cinci (Tabelul 8), adică numărul de coloane din tabelul de adevăr este șapte;

    este necesar să construiți un tabel de adevăr cu numărul specificat de rânduri și coloane, să desemnați coloanele și să introduceți în tabel posibile seturi de valori ale variabilelor logice originale;

    este necesar să se completeze tabelul de adevăr pe coloane, efectuând operații logice de bază în succesiunea necesară și în conformitate cu tabelele de adevăr ale acestora.

Acum putem determina valoarea unei funcții booleene pentru orice set de valori variabile booleene.

Tabelul 8 – Tabelul de adevăr al unei funcții logice

© 2024 ermake.ru -- Despre repararea PC-ului - Portal de informații