Sari la conținut

Sistem binar

De la Wikipedia, enciclopedia liberă
(Redirecționat de la Cod binar)
Sistem de numerație
Sistem Bază
  Unar 1
  Binar 2
  Ternar 3
  Cuaternar 4
  Cvinariu 5
  Senar 6
  Octal 8
  Zecimal 10
  Duodecimal 12
  Hexazecimal 16
  Vigesimal 20
  Hexatrigesimal 36
  Sexagesimal 60

Un sistem binar este, în general vorbind, un sistem bazat pe 2 elemente, posibilități, aspecte, părți, etape ș.a. Acest articol descrie numai sistemul de numerație binar, care folosește drept bază numărul 2. Pentru alte sisteme de numerație vezi și articolele Sistem de numerație și Sistem de numerație pozițional.

Pentru toate genurile de sisteme (care pot fi de numerație sau nu, binare sau nu) vezi Sistem (dezambiguizare).

Descriere generală

[modificare | modificare sursă]

În sistemul (de numerație) binar există doar două cifre posibile, 0 și 1. Conform definiției lui Claude Shannon, o cifră binară conține cantitatea de informație de 1 bit. Sistemul binar este în același timp și cel mai natural mod de stocare a informației în domeniul calculatoarelor, deoarece acolo 1 bit (celula de memorie cu capacitate minimă) găzduiește unitatea elementară de informație: valoarea bitului poate fi ori un 0, ori un 1.

În orice sistem informatic, conform definiției lui Turing, este nevoie de o memorie fiabilă (sigură în funcționare). Cea mai fiabilă metodă de prelucrare și respectiv de stocare a datelor de calculator se bazează pe sistemul binar: "celula este magnetizată sau nu este magnetizată", "trece curent sau nu trece curent", "cartela este perforată sau nu este perforată" etc. Cea mai apropiată alternativă ar fi fost utilizarea numerației în baza 3 (sistemul ternar), ceea ce ar fi necesitat componente electronice cu trei stări stabile, ducând la o logică trivalentă de genul "senzorul nu este excitat, senzorul este puțin excitat, senzorul este excitat", ceea ce, deși induce un nivel mai bun de discernere a informației, reduce, cel puțin în principiu, fiabilitatea potențială a sistemului.

Datorită ușurinței implementării sistemului binar în circuitele electronice, el se folosește practic la toate calculatoarele moderne.

Sistemul de numerație binar a început să fie folosit în mod implicit încă din cele mai vechi timpuri, odată cu apariția logicii bivalente: odată definite noțiunile de "propoziție adevărată" și "propoziție falsă", operațiile care lucreează cu aceste noțiuni sunt operații de tip binar. Folosirea sistemului binar s-a răspândit însă cel mai mult abia recent, odată cu apariția sistemelor informatice, începând de la cele mai rudimentare și până la cele curente.

Prima descriere cunoscută a unui sistem de numerație binar a fost scrisă cândva între sec. VIII și IV Î.Hr. de către matematicianul indian Pingala. Vezi online.

În China antică s-au folosit seturi complete de 8 trigrame și 64 hexagrame, corespunzând cu numere cu câte 3 respectiv 6 cifre binare. Și în Africa se cunosc diverse combinații binare antice.

În anul 1605 Francis Bacon și-a imaginat un sistem de codificare a literelor alfabetului prin câte o secvență de cifre binare. El și-a dat seama că, pentru codificare, se pot folosi nu numai cifrele binare, dar și orice alte obiecte cu 2 stări, ca de exemplu clopote (bat sau nu bat), lumini, torțe ș.a.

Tot în sec. XVII matematicianul german Gottfried Leibniz a descris în articolul său Explication de l'Arithmétique Binaire sistemul binar în întregime, folosindu-se chiar de simbolurile moderne 0 și 1.

În anul 1854 matematicianul și filozoful englez George Boole a publicat o lucrare fundamentală care prezintă un sistem logic denumit mai târziu algebra Booleană. Acest sistem s-a dovedit esențial pentru dezvoltarea sistemului binar și implementarea sa în circuitele electronice de mai târziu.

În 1937, Claude Shannon, un inginer și matematician american, a pus bazele teoriei informației precum și cele ale proiectării circuitelor electronice digitale.

Reprezentarea numerelor în sistemul binar

[modificare | modificare sursă]

În texte care conțin numere în mai multe sisteme de numerație, pentru a evita ambiguitățile, după numărul în cauză se adaugă ca subindice și baza sistemului de numerație în paranteze. De exemplu numărul zecimal (obișnuit) 100 se notează 100(10) (în baza zece), spre a-l deosebi de 100(2) (în baza doi), care are valoarea unui 4 obișnuit (în baza zece).

Numerele binare sunt alcătuite din secvențe de cifre binare ("biți"), care la rândul lor reprezintă orice entități care au numai 2 stări stabile diferite. De exemplu, numărul zecimal 667(10) poate fi reprezentat în binar prin următoarele șiruri binare:

- cifre binare:                                         1 0 1 0 0 1 1 0 1 1
- polarizarea unor magneti, verticala sau orizontala:   | - | - - | | - | |
- tensiune electrica prezenta sau absenta:              p a p a a p p a p p
- da sau nu, afirmatie adevarata (0) sau falsa (1):     N D N D D N N D N N

Nu este însă necesar ca cifra binară 1 să fie interpretată întotdeauna drept tensiune prezentă iar 0 drept tensiune absentă; la fel de bine poate funcționa și convenția contrară, sau cu două tensiuni diferite H (high) și L (low). De asemenea valorile logice sunt convenționale, ultimul rând din tabela de mai sus este un exemplu în acest sens, unde D-urile echivalează cu 0, iar N-urile cu 1.

Cea mai obișnuită reprezentare numerică a cifrelor binare este cea care corespunde cu sistemul cifrelor zecimale, în așa fel încât: "0"(2) corespunde lui 0(10), și "1"(2) corespunde lui 1(10).

Când se citesc numerele binare, cifrele lor se rostesc una câte una. Ca exemplu, numărul 100(2), care are valoarea zecimală 4, nu se citește "o sută", ci "unu-zero-zero" sau "unu-zero-zero în baza 2".

Valoarea numărului binar 1010011011(2) de mai sus se calculează în zecimal în felul următor (de la dreapta spre stânga):

20 + 21 + 23 + 24 + 27 + 29 = 1 + 2 + 8 + 16 + 128 + 512 = 667(10).

Pe lângă numerele pozitive și numerele negative pot fi reprezentate în binar. Aceasta se face prin adăugarea unei poziții suplimentare la extrema stângă (cea mai semnificativă) a numărului binar. De asemenea și numerele reale fracționare (cu zecimale) pot fi reprezentate în sistemul binar, și anume folosind o virgulă între partea întreagă și cea fracționară.

Numărarea în sistemul binar

[modificare | modificare sursă]
Binar Zecimal
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9

Numărarea în sistemul binar este în bună măsură asemănătoare cu cea din sistemul zecimal obișnuit. Diferența constă în faptul că în binar stau la dispoziție doar două cifre anume 0 și 1, în timp ce în sistemul zecimal există zece cifre, cele de la 0 la 9. Regulile pentru toate sistemele, deci și pentru cel binar, sunt următoarele două:

  • Numărarea începe cu o singură poziție, care pornește ca valoare (sau conținut) de la cifra 0 și continuă crescător până la cea mai mare cifră din sistem. Această poziție, cea mai din dreapta a numărului, poartă numele de "poziția (cifra) cea mai puțin semnificativă".
  • După ce o poziție curentă ajunge la cifra maximă, poziția curentă "sare" înapoi la 0, iar poziția din stânga ei trebuie incrementată cu o unitate. Această situație se numește "depășire". (Dacă cumva poziția din stânga încă nu există, ea se creează și i se dă mai întâi valoarea 1.) Prin acest procedeu este posibil ca și poziția din stânga să prezinte o depășire. În acest caz se aplică chiar această regulă din nou, altfel spus, în mod recursiv, din ce în ce mai spre stânga, până se întâlnește un 0, care, fără depășire, devine un 1.

Pentru numărarea în binar aceasta înseamnă că, după ce o poziție a devenit 1, ea se repune la 0, iar la poziția din stânga ei trebuie adăugat un 1. Rezultatul arată astfel: 0, 1, 10, 11, 100, 101, 110, 111, 1000 ș.a.m.d.

Aritmetica numerelor binare

[modificare | modificare sursă]

Cu numerele binare se pot efectua în principiu toate operațiunile aritmetice și algebrice, de exemplu comparația (punerea în relație de ordine prin <, = și >), ridicarea la putere, extragerea de radicali, funcții trigonometrice, logaritmice ș.a.m.d. Mai uzuale sunt însă operațiile aritmetice binare elementare (adunarea, scăderea, înmulțirea și împărțirea), care se aseamănă în bună măsură cu cele obișnuite, zecimale:

Adunarea în binar

[modificare | modificare sursă]

Tabla adunării a două cifre binare este următoarea:

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 (cu "depășire")

Ultimul rând de mai sus se citește: "Unu plus unu este egal cu unu-zero (în baza 2)", valoarea lui 10(2) fiind desigur 2(10).

Pe baza tablei de mai sus se pot aduna oricare 2 numere binare A și B. Exemplu (se începe de la dreapta):

     1 1 1 - 1    <== transporturi, rezultate din depășirea de pe poziția anterioară)
 A       1 1 0 1  <== valoarea lui A este 13(10) (1 + 4 + 8)
+B     1 0 1 0 1  <== valoarea lui B este 21(10) (1 + 4 + 16)
----------------
=S   1 0 0 0 1 0  <== valoarea sumei este 34(10) (2 + 32).

Scăderea în binar

[modificare | modificare sursă]

Scăderea în sistemul binar funcționează foarte asemănător cu adunarea binară. Tabla scăderii este:

0 - 0 = 0
0 - 1 = 1 (cu "împrumut")
1 - 0 = 1
1 - 1 = 0

Pe această bază se pot scădea numere binare formate din mai multe 0-uri și 1-uri. Operația se execută poziție cu poziție, de la dreapta la stânga. La nevoie se folosește "împrumutul" de la poziția de mai la stânga. De exemplu:

       * *   *      <== coloanele marcate cu steluțe se folosesc pentru împrumut
 A   1 1 0 0 1 0 1  <== A are valoarea zecimală 1 +     4 +          32 + 64 = 101(10)
−B       1 1 0 1 1  <== B are valoarea zecimală 1 + 2 +     8 + 16           =  27(10)
------------------
=D   1 0 0 1 0 1 0  <== diferența lor este D =      2     + 8 +           64 =  74(10)

Scăderea unui număr binar produce același rezultat cu adăugarea aceluiaș număr dar cu semn schimbat. La calculatoare, pentru a schimba semnul unui număr, se folosește complementul față de 2, o operație binară logică elementară. Aceasta elimină necesitatea de a mai realiza, pe lângă circuitele de adunare, și pe cele de scădere. Altfel spus, scăderea se realizează prin următoarele două adunări:

A - B = A + not B + 1

Înmulțirea în binar

[modificare | modificare sursă]

Înmulțirea în binar se bazează, la fel ca și în sistemul zecimal, pe adunare. Tabla înmulțirii binare este simplă:

0 x 0 = 0
0 x 1 = 0
1 x 0 = 0
1 x 1 = 1

Pentru a înmulți numerele binare A și B se fac întâi produsele parțiale ale lui A cu fiecare cifră binară a lui B, luate de la dreapta la stânga, și apoi se adună rezultatele parțiale între ele. Produsele parțiale ale fiecărei cifre din B cu A sunt și ele simple:

  • Dacă cifra din B este un 0, atunci și produsul parțial este 0, și nu are efect asupra adunării;
  • Dacă cifra din B este un 1, atunci produsul parțial al lui A cu 1 este chiar A.

Exemplu 1010(2) x 11011(2):

         1 1 0 1 1  <== A este egal cu 1 + 2 + 8 + 16 = 27(10) 
       ×   1 0 1 0  <== B este egal cu     2 + 8      = 10(10)    
         ---------
         0 0 0 0 0
     + 1 1 0 1 1
   + 0 0 0 0 0     
 + 1 1 0 1 1  
 -----------------
 1 0 0 0 0 1 1 1 0  <== Produsul A x B = 2 + 4 + 8 + 256 = 270(10)
 * * * *            <== depășire (la adunare)

Împărțirea în binar

[modificare | modificare sursă]

Și împărțirea binară se aseamănă în bună parte cu cea obișnuită, zecimală. Când numărul A trebuie împărțit la numărul B, A se mai numește "deîmpărțit", iar B "împărțitor". În general se deosebesc 2 feluri de împărțiri:

  • cea exactă, la care interesează și se calculează și cifrele de după virgulă,
  • și cea cu rest, când împărțitorul B nu intră exact în deîmpărțitul A; calculele se opresc acolo unde ar urma virgula, dar din deîmpărțit rămâne un rest, care trebuie specificat.

Exemplu de împărțire binară cu rest: 1100111(2) / 101(2) (sau în zecimal, 103 / 5 = 20 rest 3). Se procedează de la stânga la dreapta:

  1 1 0 0 1 1 1  / 1 0 1 = 1 0 1 0 0 (= 20(10)). Restul se află pe penultima linie, și anume 0 1 1 (= 3(10)).
- 1 0 1          <== încape și executăm scăderea; trecem un 1 la rezultat;
= 0 0 1.0        <== "coborâm" o cifră din deîmpărțit;     
  - 1 0 1        <== nu încape; trecem un 0 la rezultat; 
  0 0 1.0.1      <== mai "coborâm" încă o cifră;
    - 1 0 1      <== încercăm să scădem încă o dată, cu o poziție mai la dreapta;
    = 0 0 0.1    <== acum încape exact; trecem un 1 la rezultat, și "coborâm" cifra următoare;
      - 1 0 1    <== nu încape; trecem un 0 la rezultat; 
      0 0 0.1.1  <== mai "coborâm" o cifră; acesta este restul, deoarece ...
        - 1 0 1  <== ... când încercăm încă o dată, nu încape nici acum; trecem încă un 0 la rezultat;
                     acuma însă nu mai există nici cifre de coborât.

Împărțirea binară constă într-un șiri de scăderi. De fiecare dată când împărțitorul nu încape în același număr de cifre ale deîmpărțitului (cu alte cuvinte este mai mic), se mai "coboară" următoarea cifră spre dreapta din deîmpărțit.

Operații binare logice

[modificare | modificare sursă]

Cu numerele binare se pot executa și operații logice sau "booleene" (numite așa după matematicianul și filozoful englez George Boole); acestea nu pun accentul pe valoarea aritmetică a numărului binar în cauză, ci pe manipularea numerelor și cifrelor binare conform legilor adevărului și falsului. Vezi articolele Logică binară și Algebră booleană.

Sisteme de numărare înrudite

[modificare | modificare sursă]

Sistemul hexazecimal

[modificare | modificare sursă]

Sistemul hexazecimal are baza 16 și utilizează 16 cifre hexazecimale, care se notează astfel: 0 1 2 3 4 5 6 7 8 9 A B C D E F.

În acest șir de cifre hexazecimale,

  • cifrele de la 0(16) la 9(16) au valorile zecimale echivalente, de la 0(10) la 9(10),
  • iar cifrele A(16) ... F(16) au valorile zecimale de la 10(10) la 15(10).

Pentru reprezentarea valorilor zecimale de la 0 la 15 sunt necesari exact 4 biți, începînd cu 0000 și sfârșind cu 1111. Transformarea unui număr binar într-unul hexazecimal se face pur și simplu prin gruparea biților în grupe de câte 4 biți, de la dreapta la stînga. Exemplu:

110110110111001(2) = (0)110 1101 1011 1001 = 6DB9(16).

Transformarea inversă, din hex în bin, se face prin înlocuirea fiecărei cifre hex prin combinația corepunzătoare de 4 biți.

Pentru cei ce sunt familiarizați cu el, sistemul hexazecimal este o metodă comodă pentru afișarea conținutului binar al memoriei sau al fișierelor din calculatoarele actuale, deoarece numerele binare sunt în general foarte lungi, în schimb numerele hexazecimale sunt mai scurte chiar decât cele zecimale cu aceeași valoare. Vezi și articolul Sistem hexazecimal.

Sistemul octal

[modificare | modificare sursă]

Sistemul octal are baza 8 și utilizează 8 cifre octale, notate de la 0 la 7, care sunt identice ca valoare cu cifrele zecimale de la 0 la 7. Pentru reprezentarea valorilor octale sau zecimale de la 0 la 7 sunt necesari exact 3 biți, începând cu 000 și terminând cu 111. Transformarea unui număr binar într-unul octal se face pur și simplu prin gruparea biților în grupe de câte 3 biți, de la dreapta la stînga. Exemplu:

110110110111001(2) = 110 110 110 111 001 = 66671(8).

Transformarea inversă, din octal în binar, se face prin înlocuirea fiecărei cifre octale prin combinația corepunzătoare de 3 biți.

Sistemul octal nu mai este întrebuințat în zilele noastre aproape deloc.

Conversia numerelor binare

[modificare | modificare sursă]

Pentru conversia numerelor dintr-o bază în alta în general - vezi articolul Bază de numerație.

Conversia din zecimal în binar

[modificare | modificare sursă]

Mai întâi se împarte numărul ales la 2; restul reprezintă cifra cea mai puțin semnificativă (cea mai din dreapta) a rezultatului conversiei. Câtul se reîmparte la 2, se notează restul, și procedura se repetă cu noul cât (recursiv). Operația se sfârșește când câtul devine nul.

Pentru examplificare: conversia numărului 118(10) în binar:

Operație=Cât Rest
118 ÷ 2 = 59 0
59 ÷ 2 = 29 1
29 ÷ 2 = 14 1
14 ÷ 2 = 7 0
7 ÷ 2 = 3 1
3 ÷ 2 = 1 1
1 ÷ 2 = 0 1

Citind resturile de jos în sus, rezultatul final al conversiei este numărul binar 1110110(2).

Această metodă se poate aplica și la conversiunea în alte baze.

Conversia din binar în zecimal

[modificare | modificare sursă]

Ca exemplu folosim din nou numărul 1110110(2), pe care îl convertim înapoi în baza 10. Se adună puterile lui 2, înmulțite cu cifra binară respectivă. Puterile la care trebuie ridicat 2 încep cu n-1, unde n este numărul de cifre binare, și devin din ce în ce mai mici, de la stânga la dreapta:

Binar:          1      1      1      0      1      1      0

Zecimal:      26×1 + 25×1 + 24×1 + 23×0 + 22×1 + 21×1 + 20×0 = 118

Pentru eficiența conversiei, calculul practic se face cu o schemă Horner:

Zecimal:   ((((((0 × 2 + 1)×2 + 1)×2 + 1)×2 + 0)×2 + 1)×2 + 1)×2 + 0 = 118

Asta înseamnă dublarea totalului anterior (reprezentat mai jos cu verde) și adunarea acestuia la cifra curentă (reprezentată cu roșu), mergând de la stânga spre dreapta de-a lungul numărului binar. În cazul primei cifre a numărului binar, totalul anterior este zero, deci la fel și dublul său.

 0 × 2 + 1 = 1
 1 × 2 + 1 = 3
 3 × 2 + 1 = 7
 7 × 2 + 0 = 14
14 × 2 + 1 = 29
29 × 2 + 1 = 59
59 × 2 + 0 = 118

Totalul anterior se dublează deoarece numărul de convertit este în baza doi, însă operația se poate aplica conversiilor din orice bază prin înmulțirea totalului anterior cu baza respectivă. Spre exemplu, convertirea unui număr hexazecimal (în baza șaisprezece) se face prin înmulțirea totalului anterior cu 16 (restul operației rămânând neschimbate). Rezultatul va fi mereu în baza zece.

Operatorii binari

[modificare | modificare sursă]

Operatorii binari sunt caractere speciale cu care se notează operații binare, de exemplu cele din cadrul unui algoritm sau program. Notarea lor nu este standardizată. Sunt de mai multe feluri:

  • aritmetici: +; -; *; /
  • relaționali: <= sau ≤; >= sau ≥; == sau =; != sau ≠
  • logici: && („și”); || („sau”)

Legături externe

[modificare | modificare sursă]