8.2 Sisteme și coduri de numere

8.2.1 Reprezentare binară

8.2.2 Numere negative

8.2.3 Înmulțirea și împărțirea binară

8.2.4 Coduri binare Gray

8.2.5 Zecimal codat binar

8.2.6 Cod ASCII (Askey)

Baza sau rădăcina (notată cu R de la radix) unui sistem de numere este numărul maxim de valori discrete pe care le poate asuma fiecare cifră a unui număr. Acesta este, de asemenea, egal cu numărul maxim de caractere (simboluri) diferite care sunt necesare pentru a reprezenta orice număr din acel sistem. Pentru sistemul zecimal R = 10, pentru sistemul binar R = 2, pentru sistemul octal R = 8, și pentru sistemul hexazecimal R = 16. Suntem destul de familiarizați cu sistemul zecimal. Originea acestui sistem este probabil legată de faptul că un om are 10 degete la mână. De asemenea, 10 este un număr convenabil și moderat, care nu este nici prea mare, nici prea mic. Însă, sistemul de numere binar este ceea ce este natural pentru dispozitivele logice digitale și computerele digitale.

8.2.1 Reprezentare binară

Deoarece dispozitivele digitale folosesc intern nivele de tensiune high/low, prezența/absența impulsurilor de tensiune și starea ON/OFF a elementelor bistabile (microîntrerupătoare), pentru reprezentarea și prelucrarea datelor, este reprezentarea binară care este naturală pentru operațiunile lor interne. De exemplu, acesta este motivul pentru care, instrucțiunile, datele stocate și adresele locațiilor de memorie dintr-un computer sunt prezente sub formă de „numere binare”, chiar dacă nu toate aceste tipuri de informații sunt numerice.

Un număr binar este format din cifre binare (biți). Fiecare bit poate lua valoarea 0 sau 1. De obicei, informațiile sunt aranjate în grupuri de 8 biți numite octeți (bytes), intern într-un computer digital. Însă, un computer digital funcționează pe un singur cuvânt de date la un moment dat, iar dimensiunea cuvântului poate fi de mai mulți octeți (de exemplu, 16 biți în microcontrollere).

Dacă un șir de biți reprezintă un număr binar, atunci acesta poate fi convertit într-un număr zecimal într-o manieră simplă. Aceasta înseamnă pur și simplu o conversie din reprezentarea în bază-2 (sau radix-2) în reprezentarea de bază-10.

Exemplul 8.1

Evaluând valoarea zecimală din partea dreaptă, avem

Notă: De obicei, indicele este omis atunci când se utilizează sistemul zecimal (baza-10) sau când baza este înțeleasă de utilizator fără nicio ambiguitate.

Exemplul 8.2

Pentru a converti numărul zecimal 50,578125 în forma binară, tratați partea întreagă (50) și partea fracțională (0,578125) separat. Numărul binar este obținut prin împărțirea repetată cu 2 a părții întregi și înmulțirea repetată cu 2 a părții fracționale (se ia partea întreagă 1 sau 0). În consecinţă,

Deoarece virgula zecimală ar trebui să fie, de asemenea, reprezentată ca informație binară în interior, o anumită formă de cod sau convenție trebuie utilizată pentru a reprezenta numerele fracționate și mixte (întreg + fracțional) în cadrul unui computer. De exemplu, partea întreagă poate fi stocată într-un octet și partea fracțională în octetul adiacent. Alternativ, poate fi utilizată reprezentarea în virgulă-mobilă, în care numărul este reprezentat de o mantisă și un exponent. Reprezentarea în virgulă-mobilă este deosebit de potrivită atunci când gama de valori care este necesar să fie gestionată de un computer digital (adică, gama sa dinamică) este mare, avantajul fiind că dimensiunea cuvântului, care este necesară pentru a stoca orice număr într-o anumită gamă dinamică, ar fi mai mică în reprezentarea în virgulă-mobilă în comparație cu reprezentarea în virgulă-fixă.

Deoarece scrierea unui număr în forma binară este foarte lungă, iar conversia între formele binare și zecimale necesită mult timp, este convenabil să se folosească o bază mai mare ca 2. O astfel de bază ar trebui să aibă, de asemenea, avantajul ușurinței conversiei între binar și acea bază. Două astfel de reprezentări sunt sisteme de numere octal (bază-8) și hexazecimal sau hex (bază-16). Deoarece cea mai mare cifră octală (7) necesită 3 biți în reprezentarea binară, conversia de la forma binară la cea octală se poate face doar prin gruparea părții întregi și a părții fracționale în grupuri de 3 biți, pornind de la virgula zecimală și, apoi, convertind fiecare grup într-o cifră octală. Similar, conversia de la reprezentarea binară la hex poate fi realizată folosind grupuri de 4 biți.

8.2.2 Numere negative

Considerați un număr întreg binar cu n biți. Cel mai semnificativ bit (MSB) este bitul cel mai din stânga, iar o cifră de 1 are valoarea 2n-1. Cel mai puțin bit semnificativ (LSB) este bitul cel mai din dreapta, iar o cifră de 1 acolo are valoarea 1. Când tuturor celor n biți li se atribuie 1, valoarea numărului este 2n-1. Aceasta este cea mai mare valoare a unui număr binar de n biți. Similar, când tuturor celor n biți li se atribuie 0, valoarea numărului este 0. Aceasta este cea mai mică valoare a unui număr de n biți. Prin urmare, un spațiu de stocare digital de n biți poate ocupa n numere întregi pozitive cuprinse între 0 și 2n-1. Discuția de mai sus se referă la numere pozitive. Când numărul este negativ, este necesară o reprezentare specială pentru a ține cont de semn. Sunt disponibile mai multe metode, prezentate mai jos.

8.2.2.1 Reprezentarea magnitudinii cu semn

Când sunt reprezentate numere negative, avem nevoie de un bit în plus pentru a-i reprezenta semnul. Pentru a reprezenta -(2n-1) avem nevoie de n+1 biți. MSB este bitul de semn. În reprezentarea mărimii cu semn (sm), pentru un număr negativ, MSB = 1; iar pentru un număr pozitiv, MSB = 0. Biți rămași reprezintă mărimea numărului. De exemplu, în această reprezentare (11110)sm reprezintă zecimal -14 și (01110)sm reprezintă zecimal +14. În general, în reprezentarea sm cu n+1 biți, putem reprezenta un număr cuprins între -(2n-1) și +(2n-1). De asemenea, zero nu este reprezentat în mod unic în această formă, permițând atât un zero negativ (de exemplu, 10000) cât și un zero pozitiv (de exemplu, 00000).

8.2.2.2 Reprezentarea în complementul lui doi

În această reprezentare, MSB este 1 și are o valoare negativă atașată acestuia. Biții rămași sunt considerați a avea valori pozitive. Pentru un număr pozitiv, MSB este 0 și biții rămași sunt identici cu reprezentarea binară a numărului.

Mai exact, considerați n+1 biți care reprezintă un număr în complementul lui doi. Să presupunem că toți n+1 biți sunt 1. Atunci valoarea MSB este −2n. Valoarea restului de n biți este 2n-1. Prin urmare, valoarea generală a numărului este −2n+(2n-1) = −1. Dacă MSB este 1 și restul n biți sunt 0, avem cel mai mare număr (în mărime) negativ care poate fi reprezentat prin n+1 biți, și anume −2n. Dacă MSB este 0 și restul de n biți sunt toți 1, avem cel mai mare număr pozitiv care poate fi reprezentat de n+1 biți în forma de complement al lui 2, și anume 2n-1. Prin urmare, în forma complementului lui doi, n+1 biți pot reprezenta orice număr de la −2n la +(2n-1). De exemplu, cu 5 biți, cel mai mic număr va fi (10000)2's = −16 și cel mai mare număr va fi (01111)2's = +15. De asemenea, în metoda complementului lui doi, zero este unic reprezentat (nu există zero negativ).

Având un număr binar negativ, reprezentarea sa în complementul lui 2 poate fi formată prin următoarea metodă:

Pasul 1: Comutați valorile biților (adică, schimbați 1 în 0 și 0 în 1)

Pasul 2: Adăugați un „1” ca noul MSB

Pasul 3: Adăugați 1 la numărul binar rezultat

Reprezentarea în complementul lui doi are o proprietate interesantă numită extensie de semn. În mod specific, orice număr de 1-uri de frunte (leading-prima cifră de 1 a unui număr) pot fi incluse într-un număr negativ complement al lui 2 (presupunând că sunt disponibili un număr adecvat de biți pentru stocare), iar acesta nu își schimbă valoarea. În mod similar, orice număr de leading zerouri poate fi inclus într-un număr pozitiv complement al lui 2, iar acesta nu își schimbă valoarea. Acesta din urmă este mai evident decât primul. Ca exemple, (1011)2's, (11011)2's, (111011)2's, (1111011)2's, etc., toate reprezintă același număr negativ −5. Similar, (0110)2, (00110)2, (000110)2, (0000110)2, etc., toate reprezintă același număr pozitiv +6.

8.2.2.3 Complementul lui unu

În forma complement al lui 1, MSB este bitul de semn; 0 reprezintă un număr pozitiv și 1 reprezintă un număr negativ, de obicei. Biții rămași dau mărimea numărului. Pentru un număr pozitiv, mărimea este reprezentată în forma binară. Pentru un număr negativ, mărimea este reprezentată de complementul formei binare (adică 0 sunt schimbate în 1 și 1 sunt schimbate în 0).

Notă: Pentru numerele pozitive, forma complementul lui 1, forma complementul lui 2 și forma de magnitudine cu semn sunt identice. Dar pentru numere negative, aceste trei reprezentări sunt diferite. Proprietatea extinderii de semn se menține și pentru reprezentarea în complementul lui 1.

De exemplu, considerați 9 zecimal, care are forma binară 1001. Atunci

Cu n+1 biți, în forma complementului lui 1, putem reprezenta un număr întreg de la -(2n-1) la +(2n-1). Notă: Spre deosebire de metoda complementului lui doi, zero nu este reprezentat în mod unic; există un zero negativ (de exemplu, 10000), precum și un zero pozitiv (de exemplu, 00000).

8.2.3 Înmulțirea și împărțirea binară

Aritmetica binară este destul de analoagă cu aritmetica zecimală. Principala diferență este numărul de cifre distincte disponibile (2 pentru binar și 10 pentru zecimal). Operațiile și regulile sunt aceleași. În plus la binar, se folosesc doar 0 și 1 ca cifre primare. Atunci când valoarea unei însumări devine 2, aceasta este dusă la următorul loc superior de ordin și se adaugă ca 1 acolo (adică un transport de 1). Scăderea binară se face prin inversarea semnelor și prin adunare. Înmulțirea binară este, de asemenea, simplă, ca și pentru înmulțirea zecimală. Ar trebui să fie clar că, atât timp cât regulile pentru operațiile aritmetice sunt furnizate și suficientă memorie (spațiu de stocare) este disponibilă, un computer digital poate urma instrucțiunile foarte rapid pentru a produce rezultate exacte.

8.2.4 Coduri binare Gray

Reprezentarea binară a numerelor, așa cum s-a discutat mai sus, este cunoscută sub denumirea de cod binar natural sau cod binar direct deoarece provine direct din reprezentarea standard a numerelor în raport cu o bază arbitrară. Un dezavantaj practic al acestui cod binar natural este faptul că ar fi nevoie de mai mult de un bit de comutare atunci când se trece de la un număr la următorul număr consecutiv. Deoarece comutarea biților s-ar putea să nu se producă simultan în hardware-ul real, ar exista o anumită ambiguitate privind valoarea reală în timpul comutării, în funcție de care bit este comutat primul. În encoderele absolute utilizate în detectarea mișcării (capitolul 6), se utilizează un cod Gray binar. Multe astfel de coduri gray binare ar putea fi dezvoltate în funcție de modelul de biți folosit pentru a reprezenta numărul de pornire (de obicei zero).

8.2.5 Zecimal codat binar

În reprezentarea zecimală codată binar (BCD), în loc să reprezentăm întregul număr zecimal prin forma sa binară, reprezentăm fiecare cifră zecimală separat prin forma sa binară. Deoarece reprezentarea binară a celei mai mari cifre zecimale (9) este 1001, în BCD, fiecare cifră zecimală va necesita 4 biți. Dezavantajul BCD, însă, este că codurile 1010 până la 1111 nu sunt utilizate (irosite), deoarece nu reprezintă cifre zecimale separate. Avantajul este ușurința conversiei, similară cu conversia dintre binar și hex.

Exemplul 8.3

Deoarece (7)10 = (0111)2 și (9)10 = (1001)2, avem (79)10 = (01111001)BCD

Acest rezultat este destul de diferit de reprezentarea binară a lui 79, care se găsește a fi (01001111)2.

Din punct de vedere intrare/ieșire, este convenabil să se folosească BCD pentru manipularea aritmetică, deoarece, având în vedere familiaritatea sa, preferăm de obicei reprezentarea zecimală în lumea reală. Dar, în computer, manipularea aritmetică de numere BCD va necesita un set de reguli diferit (și mai complex) decât cele utilizate pentru numere binare. Chiar și cu acest dezavantaj și utilizarea ineficientă a memoriei, BCD ar putea fi preferat în aplicațiile orientate pe intrare/ieșire, cum ar fi terminalele punct-de-vânzare, unde prelucrarea în sine nu este complexă, dar ușurința conversiei de la și la forma zecimală este un avantaj major. BCD este, de asemenea, utilizat în mod obișnuit pe afișajele digitale, cum ar fi afișarea numerică cu diode emițătoare de lumină cu șapte segmente (LED) (vezi figura 8.1), unde fiecare cifră zecimală este iluminată separat prin alimentarea unui set adecvat a celor șapte segmente LED.

FIGURA 8.1 Afișaj LED cu șapte segmente pentru o cifră zecimală (este ilustrată cifra 3)

8.2.6 Cod ASCII (Askey)

Un număr calculat de un microcontroller ar fi reprezentat în mod binar, dar acesta trebuie convertit într-o formă adecvată conform unui cod, în funcție de cum este afișat ca număr zecimal pe un afișaj LED, sau imprimat pe hârtie, sau utilizat ca semnal de control pentru a controla un proces. Informațiile primite de un computer digital de la un dispozitiv periferic, cum ar fi o tastatură (dispozitiv de intrare) pot include date non-numerice (de exemplu, litere în alfabet și caractere speciale și comenzi de control), precum și date numerice. Mai mult, numerele care apar într-un fișier text (de exemplu, într-o scrisoare sau un raport) iau un sens diferit în interiorul unui computer din datele numerice care vor fi procesate (de exemplu, înmulțire, scădere) de către computer. Similar, informațiile transmise de la un computer la un dispozitiv de ieșire (de exemplu, afișaj) pot, de asemenea, să ia aceste forme diferite. De obicei, informația introduce și lasă o tastatură ca o secvență de impulsuri (biți în serie) și un computer gestionează informațiile într-o manieră paralelă de biți (ca octeți sau cuvinte). Codul standard utilizat pentru transferul informației între un computer și o tastatură este United States of America Standard Code for Information Exchange (U.S.-ASCII), care este de obicei prescurtat ca cod ASCII. Numere zecimale, litere mici (simple) și litere mari (majuscule) din alfabet, caracterele speciale ale tastaturii și comenzile de control pot fi transmise ca informații binare folosind ASCII. Pentru ASCII sunt necesari șapte biți. Dar, de obicei, este folosit un octet (8 biți), al optulea biți fiind folosit ca bit de paritate pentru a verifica dacă erorile au intrat în datele transmise (verificare paritate impară sau paritate pară).

8.3 Logica și algebra booleană