Carte_C_2003

download Carte_C_2003

of 278

Transcript of Carte_C_2003

  • 8/6/2019 Carte_C_2003

    1/278

    I

    CUPRINS

    Capitolul IINTRODUCERE NARHITECURA SISTEMELOR DE CALCUL............................... 1

    1.1. Importana limbajului C....................................................11.2 Arhitectura de baz a unui calculator ................................4

    1.2.1 Microprocesorul .........................................................6

    1.2.2 Memoria .....................................................................81.2.3 Echipamentele periferice..........................................101.3. Programarea calculatorului.............................................13

    1.3.1. Sistemul de operare.................................................141.3.2. Tipuri de fiiere.......................................................171.3.3. Construirea fiierului executabil .............................18

    Capitolul II

    REPREZENTAREA DATELOR N CALCULATOR................. 232.1. Reprezentarea intern/extern a numerelor...........................242.2. Reprezentarea extern a numerelor......................................25

    2.2.1. Reprezentarea extern a numerelor ntregi..............262.2.2. Reprezentarea extern a numerelor reale ................29

    2.3 Reprezentarea intern a numerelor ..................................312.3.1. Reprezentarea intern a numerelor ntregi ..............312.3.2 Adunarea, scderea i nmulirea numerelor ntregi.332.3.3 Reprezentarea intern a numerelor reale..................35Game de reprezentare pentru numerele reale....................462.3.5. Codificare BCD.......................................................47

    Capitolul IIIELEMENTELE DE BAZ ALE LIMABJULUI C...................... 49

    3.1. Crearea i lansarea n execuie a unui program C...........49

    3.2. Structura unui program C ...............................................513.3. Mulimea caracterelor.....................................................53

  • 8/6/2019 Carte_C_2003

    2/278

    II

    3.3.1. Litere i numere.......................................................533.3.2. Caractere whitespace...............................................533.3.3. Caractere speciale i de punctuaie..........................543.3.4. Secvene escape.......................................................54

    3.4. Identificatori ...................................................................563.5. Cuvintele cheie ale limbajului C.....................................563.6. Constante ........................................................................56

    3.6.1. Constante caracter ...................................................573.6.2. Constante ntregi .....................................................573.6.3. Constante n virgul mobil ....................................573.6.4. Constante ir............................................................583.6.5. Constanta zero.........................................................593.6.6. Obiecte constante ....................................................593.6.7. Enumerri................................................................60

    Capitolul IVOPERANZI I OPERATORI N C................................................ 61

    4.1. Operanzi..........................................................................614.2. Operatori.........................................................................61

    4.2.1. Operatori aritmetici .................................................624.2.2. Operatori de incrementare i decrementare.............634.2.3. Operatori relaionali ................................................634.2.4. Operatori logici .......................................................644.2.5. Operatori logici la nivel de bit.................................654.2.6. Operatorul de atribuire ............................................704.2.7. Operatorul sizeof.....................................................704.2.8. Operatorul ternar ? .................................................71

    4.2.9. Operatorul virgul ...................................................724.2.10. Operatorul de forare a tipului sau de conversie

    explicit (expresie cast) ........................................724.2.11. Operatorii parantez ..............................................734.2.12. Operatorul adres ..................................................734.2.13. Ali operatori ai limbajului C ................................744.2.14. Regula conversiilor implicite i precedena

    operatorilor ...........................................................74

  • 8/6/2019 Carte_C_2003

    3/278

    III

    Capitolul VINSTRUCIUNI .............................................................................. 76

    5.1. Instruciuni etichetate (instruciunea goto) .....................765.2. Instruciuni expresie........................................................77

    5.3. Instruciuni compuse.......................................................775.4. Instruciuni de selecie ....................................................785.4.1. Instruciunea if.........................................................785.4.2. Instruciuni de selecie multipl: if - else if.............795.4.3. Instruciunea switch.................................................80

    5.5. Instruciuni repetitive......................................................825.5.1. Instruciunea for ......................................................825.5.2. Instruciunea while ..................................................86

    5.5.3. Instruciunea do-while.............................................875.5.4. Bucle ncuibate........................................................895.5.5. Instruciunea break ..................................................915.5.6. Instruciunea continue .............................................92

    Capitolul VITIPURI DE DATE STRUCTURATE ............................................ 93

    6.1. Tablouri unidimensionale ...............................................936.1.1. Constante ir............................................................946.1.2. Iniializarea vectorilor de caractere.........................956.1.3. Funcii pentru prelucrarea irurilor (fiierul antet

    string.h).................................................................976.2. Tablouri cu dou dimensiuni (matrice).........................100

    6.2.1. Iniializarea matricelor ..........................................1006.2.2. Tablouri bidimensionale de iruri .........................101

    6.3. Tablouri multidimensionale..........................................1016.4. Structuri ........................................................................1026.4.1. Tablouri de structuri..............................................1046.4.2. Introducerea structurilor n funcii ........................1106.4.3. Tablouri i structuri n structuri.............................114

    6.5. Uniuni ...........................................................................1146.6. Enumerri .....................................................................116

  • 8/6/2019 Carte_C_2003

    4/278

    IV

    Capitolul VIIPOINTERI...................................................................................... 118

    7.1. Operatori pointer...........................................................1187.1.1. Importana tipului de baz.....................................120

    7.1.2. Expresii n care intervin pointeri...........................1207.2. Pointeri i tablouri.........................................................1257.2.1. Indexarea pointerilor .............................................1267.2.2. Pointeri i iruri.....................................................1287.2.3. Preluarea adresei unui element al unui tablou.......1297.2.4. Tablouri de pointeri...............................................1297.2.5. Pointeri la pointeri.................................................1307.2.6. Iniializarea pointerilor..........................................131

    7.2.7. Alocarea dinamic a memoriei..............................1327.2.8. Pointeri la structuri................................................1347.2.9. Structuri dinamice liniare de tip list ...................137

    Capitolul VIIIFUNCII ......................................................................................... 150

    8.1. Forma general a unei funcii .......................................1508.2. Rentoarcerea dintr-o funcie ........................................1528.3. Valori returnate.............................................................1538.4. Domeniul unei funcii...................................................154

    8.4.1. Variabile locale .....................................................1558.4.2. Parametri formali...................................................1568.4.3. Variabile globale ...................................................157

    8.5. Apelul funciilor............................................................1618.6. Apelul funciilor avnd ca argumente tablouri .............163

    8.7. Argumentele argc i argv ale funciei main() ...............1668.8. Funcii care returneaz valori nentregi ........................1688.9. Returnarea pointerilor...................................................1698.10. Funcii de tip void.......................................................1728.11. Funcii prototip ...........................................................1738.12. Funcii recursive .........................................................1748.13. Clase de memorare (specificatori sau atribute)...........1768.14. Pointeri la funcii ........................................................181

  • 8/6/2019 Carte_C_2003

    5/278

    V

    Capitolul IXPREPROCESAREA ...................................................................... 183

    9.1. Directive uzuale............................................................1839.2. Directive pentru compilare condiionat ......................185

    9.3. Modularizarea programelor .........................................189

    Capitolul XINTRRI/IEIRI ........................................................................... 194

    10.1. Funcii de intrare i ieire - stdio.h ...............................19410.2. Operaii cu fiiere .......................................................19710.3. Nivelul inferior de prelucrare a fiierelor ...................199

    10.3.1. Deschiderea unui fiier........................................200

    10.3.2. Scrierea ntr-un fiier...........................................20410.3.3. Citirea dintr-un fiier...........................................20610.3.4. nchiderea unui fiier...........................................20810.3.5. Poziionarea ntr-un fiier....................................20810.3.6 tergerea unui fiier .............................................21010.3.7. Exemple de utilizare a funciilor de intrare/ieire de

    nivel inferior .......................................................21110.4. Nivelul superior de prelucrare a fiierelor..................216

    10.4.1. Funcia fopen() ....................................................21610.4.2. Funcia fclose()....................................................21810.4.3. Funciile rename() i remove()...........................21910.4.4. Funcii de tratare a erorilor..................................21910.4.5. Funcii cu acces direct.........................................22010.4.6. Funcii pentru poziionare ...................................22110.4.7. Ieiri cu format ....................................................223

    10.4.8. Intrri cu format ..................................................22610.4.9. Funcii de citire i scriere a caracterelor..............228

    Capitolul XIUTILIZAREA ECRANULUI N MOD TEXT ........................... 233

    11.1. Setarea ecranului n mod text .....................................23311.2. Definirea unei ferestre ................................................23411.3. tergerea unei ferestre ................................................234

    11.4. Deplasarea cursorului .................................................235

  • 8/6/2019 Carte_C_2003

    6/278

    VI

    11.5. Setarea culorilor..........................................................23511.6. Funcii pentru gestiunea textelor ................................236

    Capitolul XII

    UTILIZAREA ECRANULUI N MOD GRAFIC....................... 24012.1. Iniializarea modului grafic.........................................24012.2. Gestiunea culorilor......................................................24212.3. Setarea ecranului.........................................................24412.4. Utilizarea textelor n mod grafic.................................24412.5. Gestiunea imaginilor...................................................24612.6. Desenarea i colorarea figurilor geometrice...............247

    Capitolul XIIIFUNCII MATEMATICE............................................................ 253

    13.1 Funcii trigonometrice .................................................25313.2 Funcii trigonometrice inverse.....................................25413.3 Funcii hiperbolice.......................................................25413.4 Funcii exponeniale i logaritmice..............................25413.5 Generarea de numere aleatoare....................................25513.6 Alte tipuri de funcii matematice .................................256

    Capitolul XIVELEMENTE DE PROGRAMARE AVANSAT ....................... 257

    14.1 Gestionarea memoriei..................................................25714.1.1 Memoria convenional........................................25714.1.2 Memoria expandat ..............................................26014.1.3 Memoria extins...................................................260

    14.1.4 Stiva......................................................................26014.2 Servicii DOS i BIOS ..................................................26114.2.1 Serviciile BIOS ....................................................26214.2.2 Serviciile DOS......................................................266

    14.3 Bibliotecile C...............................................................27014.3.1 Reutilizarea unui cod obiect.................................27014.3.2 Lucrul cu fiiere bibliotec...................................270

    14.3 Fiierele antet...............................................................271

    BIBLIOGRAFIE............................................................................ 272

  • 8/6/2019 Carte_C_2003

    7/278

    1

    Capitolul I

    INTRODUCERE N

    ARHITECURA SISTEMELOR DE CALCUL

    1.1. Importana limbajului C

    Creat n anul 1972 de programatorii de sistem Dennis M.Ritchie i Brian W. Kernighan de laBell Laboratories cu scopul de aasigura implementarea portabil a sistemului de operare UNIX, C-uleste astzi unul din cele mai cunoscute i puternice limbaje deprogramare. Eficient, economic i portabil, C-ul este o alegere bunpentru realizarea oricrui tip de programe, de la editoare de texte,

    jocuri cu faciliti grafice, programe de gestiune i pentru calculetiinifice, pn la programe de sistem, constituind unul dintre celemai puternice instrumente de programare.

    Adesea referit ca limbaj portabil, C-ul permite transferul

    programelor ntre calculatoare cu diferite procesoare i n acelai timpfaciliteaz utilizarea caracteristicilor specifice ale mainilorparticulare, programele scrise n C fiind considerate cele maiportabile.

    Dac evoluia limbajelor de programare a adus n prim plannume ca FORTRAN, LISP, COBOL, ALGOL-60 sau PASCAL, unelecu rspndire mai mult academic fiind folosite pentru a prezentaconceptele de baz sau conceptele avansate de programare ca de

    pild ALGOL-60 sau PASCAL, altele cu rspndire industrialmasiv ca de pild FORTRAN i COBOL limbajul C a ptrunsmai lent, dar foarte sigur. Realitatea arat clar c, n momentul de fa,piaa productorilor de programe este dominat net de C i devariantele evoluate ale acestuia.

    Elementele principale care au contribuit la succesul C-ului sunturmtoarele:

    - modularizarea programelor ce d posibilitatea unuisingur programator s stpneasc relativ uor programe de zeci demii de linii de surs;

  • 8/6/2019 Carte_C_2003

    8/278

    2

    - capacitatea de programare att la nivel nalt cti la nivelsczut ceea ce d posibilitatea utilizatorului de a programa fie fra simi sistemul de operare i maina de calcul, fie la un nivelapropiat de sistemul de operare ceea ce permite un control foarte bun

    al eficienei programului din punct de vedere vitez/memorie;- portabilitatea programelor ce permite utilizareaprogramelor scrise n C pe o mare varietate de calculatoare isisteme de operare;

    - facilitile de reprezentare i prelucrare a datelor materializate printr-un numr mare de operatori i funcii debibliotec ce fac programarea mult mai uoar.

    Prin anii 80 interesul pentru programarea orientat pe obiecte acrescut, ceea ce a condus la apariia de limbaje care s permitutilizarea ei n scrierea programelor. Limbajul C a fost dezvoltat i el

    n aceast direcie i n anul 1980 a fost dat publicitii limbajul C++,elaborat de Bjarne Stroustrup de la AT&T. La ora actual, majoritatealimbajelor de programare moderne au fost dezvoltate n direciaprogramrii orientate pe obiecte.

    Limbajul C++, ca i limbajul C, se bucur de o portabilitatemare i este implementat pe o gam larg de calculatoare ncepnd cumicrocalculatoare i pn la cele mai mari supercalculatoare.

    Limbajul C++ a fost implementat pe microcalculatoarelecompatibile IBM PC n mai multe variante. Cele mai importanteimplementri ale limbajelor C++ pe aceste calculatoare sunt celerealizate de firmeleMicrosoftiBorland.

    Conceptele programrii orientate pe obiecte au influenat nmare msur dezvoltarea limbajelor de programare n ultimul deceniu.De obicei, multe limbaje au fost extinse astfel nct ele s admitconceptele mai importante ale programrii orientate pe obiecte. Uneori

    s-au fcut mai multe extensii ale aceluiai limbaj. De exemplu,limbajul C++ are ca extensii limbajul Ece permite crearea i gestiuneaobiectelor persistente, lucru deosebit de important pentru sistemele degestiune a bazelor de date, limbajul O ce ncearc s mbine facilitilede nivel nalt cu cele ale programrii de sistem, limbajul Avalon/C++destinat calculului distribuit, i nu n ultimul rnd binecunoscutul deacum limbajJava, specializat n aplicaii Internet.

    Interfeele utilizator au atins o mare dezvoltare datoritfacilitilor oferite de componentele hardware ale diferitelorcalculatoare. n principiu, ele simplific interaciunea dintre programe

  • 8/6/2019 Carte_C_2003

    9/278

    3

    i utilizatorii acestora. Astfel, diferite comenzi, date de intrare saurezultate pot fi exprimate simplu i natural utiliznd diferite standardecare conin ferestre, bare de meniuri, cutii de dialoguri, butoane, etc.Cu ajutorul mouse-ului toate acestea pot fi accesate extrem de rapid i

    uor fr a mai fi nevoie s cunoti i s memorezi o serie ntreagcomenzi ale sistemului de operare sau ale limbajului de programare.Toate acestea conduc la interfee simple i vizuale, accesibile unuisegment foarte larg de utilizatori.

    Implementarea interfeelor este mult simplificat prin utilizarealimbajelor orientate spre obiecte, aceasta mai ales datorit posibilitiide a utiliza componente standardizate aflate n biblioteci specifice.Importana aplicrii conceptului de reutilizare a codului rezult dinfaptul c interfeele utilizator adesea ocup 40% din codul total alaplicaiei.

    Firma Borland comercializeaz o bibliotec de componentestandardizate care pot fi utilizate folosind limbajul C++, biblioteccunoscut sub numele Turbo Vision.

    De obicei, interfeele utilizator gestioneaz ecranul n modgrafic. O astfel de interfa utilizator se numete interfa utilizatorgrafic. Una din cele mai populare interfee utilizator grafice pentrucalculatoarele IBM PC este produsul Windows oferit de firma

    Microsoft.Windows este un mediu de programare ce amplific facilitile

    oferite de sistemul de operare MS-DOS. Aplicaiile Windows se potdezvolta folosind diferite medii de dezvoltare ca: Turbo C++ pentruWindows, Pascal pentru Windows, Microsoft C++, Microsoft VisualBasic, Visual C i Visual C++.

    Componentele Visual permit specificarea n mod grafic ainterfeei utilizator, a unei aplicaii, folosind mouse-ul, iar aplicaia

    propriu-zis se programeaz ntr-un limbaj de tip Basic, C sau C++.Dac n ani 70 se considera c o persoan este rezonabil s sepoat ocupa de o aplicaie de 4-5 mii de instruciuni, n prezent, ncondiiile folosirii limbajelor de programare orientate pe obiecte,aceast medie a ajuns la peste 25 de mii de instruciuni.

    Un limbaj de programare trebuie privit nu doar la suprafaa sa sintax i mod de butonare a calculatorului pentru o implementareparticular ci mai ales n profunzime, prin conceptele pe care sebazeaz, prin stilul de programare, prin modul de structurare aaplicaiei i, implicit, a programului, prin filozofia de rezolvare a

  • 8/6/2019 Carte_C_2003

    10/278

    4

    problemelor folosind limbajul. Din aceste puncte de vedere, C-ul nupoate lipsi din cultura unui programator, iar pentru un profesionist C-ul este, i mai mult, o necesitate vital, acesta fiind piatra de temeliepentru nelegerea i utilizarea eficient a limbajelor de nivel nalt

    orientate pe obiecte i Visual.1.2 Arhitectura de baz a unui calculator

    Calculatoarele de tip PC (calculatoare personale) reprezint celemai rspndite i mai utilizate dintre calculatoare, datorit gradului deaccesibilitate i preului relativ sczut. Indiferent de tipulcalculatorului, modul general de concepie, de alctuire i funcionareeste acelai. Calculatorul este o main programabil. Dou dintreprincipalele caracteristici ale unui calculator sunt:

    1. Rspunde la un set specific de instruciuni ntr-o manier binedefinit.

    2. Calculatorul poate executa o list prenregistrat de instruciuni,numitprogram.

    Calculatoarele moderne sunt electronice i numerice. Partea de circuite electrice i electronice precum i conexiunile

    fizice dintre ele se numete hardware. Totalitatea programelor precum i datele aferente acestor

    programe poart denumirea de software.

    Echipamente de stocare date(HDD, FDD, CD-ROM, etc.)

    Echipamente de intrare

    Echipamente de ie ire

    UPCUnitatea de procesare

    i control

    Fig.1.1 Configuraia standard pentru utilizator

  • 8/6/2019 Carte_C_2003

    11/278

  • 8/6/2019 Carte_C_2003

    12/278

    6

    acesta este dotat standard cu tastatur, mouse, monitor idispozitive periferice de stocare a datelor.

    Memoriasecundar

    Memoriaprincipal

    UNITATEACENTRAL

    Echipamentde intrare

    Echipamentde ieire

    Fig. 1.2 Arhitectura minimal a unui sistem de calcul

    staii de lucru (workstation): Un calculator monoutilizator demare putere. Aceasta este asemntor unui PC dar are unmicroprocesor mai puternic i un monitor de nalt calitate (rezoluiemai mare).

    minicalculator (minicomputer): Un calculator multiutilizator(multi-user) capabil s lucreze simultan cu zeci sau chiar sute de

    utilizatori. mainframe: Un calculator multiutilizator capabil s lucreze

    simultan cu sute sau chiar mii de utilizatori. supercomputer: Un computer extrem de rapid care poate

    executa sute de milioane de operaii ntr-o secund.

    1.2.1 MicroprocesorulMicroprocesorul este cea mai important i cea mai scump

    component a unui calculator de performanele acesteia depinznd nmare msur rezultatele ntregului sistem.Din punct de vedere fizic, microprocesorul este un cip ce

    conine un circuit integrat complex ce i permite s prelucrezeinformaii prin executarea unor operaii logice i matematice diverse(adunri, scderi, nmuliri, mpriri, comparri de numere).

    El este compus din dou pri importante: unitatea de execuie(EU Execution Unit) i unitatea de interfa a magistralei de date(BIU Bus Interface Unit). Prima component realizeaz efectiv

  • 8/6/2019 Carte_C_2003

    13/278

    7

    operaiile, iar cea de-a doua are funcia de transfer a datelor de la inspre microprocesor.

    Microprocesorul reprezint de fapt unitatea central a unuicalculator i ndeplinete o serie de activiti specifice cum ar fi:

    execut operaii aritmetice i logice, decodific instruciuni speciale,transmite altor cipuri din sistem semnale de control. Toate acesteoperaii sunt executate cu ajutorul unor zone de memorie alemicroprocesorului, numite registre. Orice microprocesor are un setfinit de instruciuni pe care le recunoate i pe care le poate executa.

    Calculatoarele IBM PC folosesc procesoare INTEL saucompatibile, realizate de alte companii cum ar fi: AMD, NexGen,CYRIX. Numele microprocesorului este folosit la identificareacalculatorului. Se folosesc frecvent expresii de tipul calculator 386,

    calculator 486, calculator Pentium II, etc.n 1971 firma Intel a fost abordata de o companie Japoneza,

    acum disprut, pentru a construi un circuit dedicat pentru un noucalculator. Designerul Ted Hoff a propus o soluie programabil, de uzgeneral, i astfel s-a nscut circuitul Intel 4004. Au urmat la scurt timpchipurile 4040 si 8008 dar lor le lipseau multe din caracteristicilemicroprocesoarelor aa cum le tim noi azi. n 1974 Intel a prezentatpentru prima oar circuitul Intel 8080 care a fost folosit in sistemele

    Altair i IMSAI. Curnd dup aceea au aprut procesoarele Motorola6800 i 6502 de la MOS Technology. Doi dintre proiectanii de laIntel au prsit firma, crend corporaia ZILOG care a produs chipulZ80 (compatibil cu 8080 dar cu set de instruciuni mai puternic i dedou ori mai rapid.

    Cipul Intel 4004 a fost primul procesor comercial, lansat lasfritul anului 1971. La un pre de circa 200$ i nglobnd 2300 detranzistori, cipul 4004 dezvolta mai mult putere de calcul dect

    ENIAC, primul calculator electronic, cu 25 de ani n urma. Fa decele 18.000 de tuburi cu vacuum ce ocupau 900 metri cubi, procesorul4004 putea dezvolta 60.000 de operaii pe secund. Aceast invenie acontribuit la revoluionarea domeniilor de aplicaii ale computerelor,dnd startul unui adevrat galop de inovaii tehnologice. Urmtorulpas a fost n 1980, cnd IBM a inclus un procesor Intel n arhitecturaprimului PC.

    Astzi PC-urile sunt pretutindeni n jurul nostru. Un copil carelucreaz la o maina ce incorporeaz un procesor Pentium Probeneficiaz de mult mai mult putere de calcul dect dispunea

  • 8/6/2019 Carte_C_2003

    14/278

    8

    guvernul SUA n perioada lansrii primelor echipaje umane ctreLun.

    ntr-un numr aniversar al publicaiei Communications of theACM, Gordon Moore, co-fondator al companiei Intel, era optimist n

    privina evoluiei PC-urilor i a microprocesoarelor: "complexitateamicroprocesoarelor, care se msoar prin numrul de tranzistori pecip, s-a dublat aproape constant la fiecare 18 luni, de la apariiaprimului prototip 4004. Aceasta evoluie exponenial a determinat ocontinu cretere a performanelor PC-urilor i o scdere a costuluiprocesului de calcul. Pe cnd n 1991 un PC bazat pe procesorul Intel486 costa aproape 225$ pentru o performan de un milion deinstruciuni pe secund (MIPS), astzi, un sistem desktop ce utilizeazun cip Pentium Pro este evaluat la circa 7$ pe MIPS. Nu se ntrevede

    nici o dificultate care s frneze aceast rat de dezvoltare".

    1.2.2 MemoriaMicroprocesorul are capacitatea de a memora date care urmeaz

    a fi prelucrate, ct i rezultatele intermediare. Se observ c rolul suprincipal este de a prelucra i transmite informaiile i rezultatele ideci capacitatea sa de memorare este mic neputnd stoca programe.De aceea, un calculator necesiti o memorie care s gzduiasc date

    i programe.Memoria este format din punct de vedere fizic din cipuri cestocheaz informaia sub forma a dou niveluri de tensiune cecorespund valorilor 0 i 1 din sistemul de numeraie. Celulele de bazale memoriei (ce pot avea valoarea 0 sau 1) se numesc bi i i elereprezint particulele cele mai mici de informaie din calculator.Pentru citirea informaiilor nu se folosesc bii n mod individual ciacetia sunt grupai ntr-o succesiune. Astfel o succesiune de 8 biiformeaz

    un octet (sau un byte) aceasta reprezentnd unitatea de

    msur a capacitii de memorie. Deoarece reprezentarea numerelor ncalculator se face n baza 2 i nu n baza 10, aa cum suntem obinuii

    n mod normal s lucrm, i multiplii unui byte vor fi puteri ale lui 2,astfel:

    1 KB=210B=1024 B1 MB=210KB=1 048 576 B1 GB=210MB=230 BAbrevierile K (kilo), M (mega), G (giga) se scriu de obicei cu

    litere mari i reprezint mii, milioane i, respectiv, miliarde.

  • 8/6/2019 Carte_C_2003

    15/278

    9

    Memoria unui calculator are dou componente: memoriaprincipal (intern) i memoria secundar (extern). Memoria interneste memoria ce poate fi accesat n mod direct de ctre microprocesori n care sunt ncrcate programele nainte de a fi executate de ctre

    microprocesor. Dac primele procesoare puteau accesa doar 1 MB dememorie astzi un procesor Pentium poate accesa peste 256 MB.Memoria principal este format din dou tipuri de circuite: cip-uriROM i cip-uri RAM.

    Circuitele de tip ROM ( Read Only Memory) au memorateprogramele care controleaz iniial calculatorul (sistemul de operare).Aceste memorii pot fi doar citite (coninutul lor nu poate fi modificat).nscrierea coninutului acestor memorii se face de ctre fabricant, iaroperaiunea de nscriere cu programe se mai numete ardereamemoriilor.

    Circuitele de tip RAM ( Random Acces Memory ) sunt memoriila care utilizatorul are acces i al cror coninut se terge ladeconectarea calculatorului. n memoria RAM informaia este stocattemporar. De exemplu, programele de aplicaii curente i dateleasociate acestor aplicaii sunt ncrcate n memoria RAM nainte de afi prelucrate de ctre microprocesor.

    Deoarece capacitatea de memorie a unui calculator nu poate fi

    att de mare nct s poat pstra toate programele pe vrem s leexecutm, a aprut necesitatea existenei unor memorii externe, cares fie solicitate la nevoie. Rolul acestora l joacdiscurilei ele pot fiasemnate cu crile dintr-o bibliotec pe care le putem consulta ori decte ori avem nevoie de anumite informaii.

    Primele discuri aprute pentru PC-uri, numite i dischete,floppy disk-uri sau discuri flexibile, permiteau stocarea a maximum160 KB de informaie. Astzi mai exist doar dischete cu diametrul de

    3.5 inch cu capacitatea de 1,44 MB. Existena acestora pare a fi pusns n pericol de apariia CD-urilor reinscriptibile a cror capacitatede memorare depete 700 MB iar evoluia tehnologic, din ce n cemai rapid, d semne c lucrurile nu se vor opri aici.

    Dischetele folosesc metode magnetice de memorare ainformaiei motiv pentru care ele se mai numesc i suporturimagnetice de informaie.

    Principala component a unui calculator utilizat pentrumemorarea programelor o reprezint hard discul. Acesta poate fiasemnat cu o dischet de mare capacitate, integrat ntr-o unitate

  • 8/6/2019 Carte_C_2003

    16/278

    10

    ncapsulat. Iniial, puine PC-uri prezentau hard discuri, dar cumpreurile acestora au sczut considerabil, iar performanele icapacitile au crescut, n prezent toate calculatoarele prezint acestdispozitiv. n clipa de fa, capacitatea de memorare a unui hard disc a

    depit valoarea de 40 de GB.1.2.3 Echipamentele periferice

    Comunicarea om-main se realizeaz cu ajutorulechipamentelor periferice prin intermediul crora utilizatorul poateprograma sau da anumite comenzi calculatorului sau poate vizualizarezultatele obinute de ctre anumite programe. Principaleleechipamente periferice ale unui calculator sunt urmtoarele: tastatura,mouse-ul, scanner-ul, monitorul i imprimanta. Ele pot fi grupate n

    echipamente de intrare cele prin care calculatorul primeteinformaii sau comenzi (tastatur, mouse, scanner) - i echipamente deieire cele prin care calculatorul transmite informaii n exterior(monitor, imprimant). n continuare sunt prezentate ctevacaracteristici ale fiecrui echipament.

    Tastatura este principalul dispozitiv de intrare alcalculatorului prin intermediul cruia se transmit comenzi ctreunitatea central. Cuplarea la calculator a tastaturii se face prin

    intermediul unui cablu de conectare.Din punct de vedere al dispunerii tastelor, tastatura se aseamndestul de mult cu cea a unei maini de scris dar are i pri care oindividualizeaz.

    Primele tastaturi au avut 83/84 de taste, pentru ca, ulterior, eles fie mbogite prin dublarea tastelor existente sau adugarea altoranoi, ajungndu-se la 101/102 taste.

    Din punct de vedere al funcionalitii lor ele pot fi mprite npatru categorii:

    - taste alfanumerice;- taste cu scopuri speciale;- taste direcionale i numerice;- taste funcionale.

    Tastele alfanumerice conin literele, cifrele i semnele depunctuaie i ocup partea central a tastaturii. Acionarea unei astfelde taste determin apariia caracterului corespunztor pe ecranulcalculatorului. Tastele cu scopuri speciale sunt aezate n acelai bloccu tastele alfanumerice i determin efectuarea anumitor aciuni fr

  • 8/6/2019 Carte_C_2003

    17/278

    11

    nscrierea de caractere pe ecran. Tastele de micare se afl situate npartea dreapt a tastaturii i ele funcioneaz n dou moduri, care potfi comutate prin acionarea altei taste, aflate deasupra lor, pe care scrieNumLock. Dac ledul corespunztor acestei taste este aprins, modul

    de lucru este numeric, n caz contrar fiind comutat pe semnificaiadirecional. Tastele funcionale sunt un grup de 12 taste situate npartea de sus a tastaturii avnd pe ele litera F urmat de un numr ntre1 i 12. Acionarea acestor taste determin efectuarea unor operaiispecifice de la program la program.

    Mouse-ul este tot un echipament de intrare mai uor demanevrat dect tastatura dar care poate efectua mai puine operaii.Totui, foarte multe aplicaii (n special aplicaiile grafice) nu mai potfi concepute fr mouse. Un mouse are aspectul unei buci de spun,uor manevrabil, avnd dedesubt o bil poziionabil, cu sensibilitatei vitez reglabile.

    Micarea maouse-ului pe o suprafa plan este corelat cudeplasarea pe ecran a unui cursor cu o form deosebit: cruciuli,sgeat, etc. Declanarea unei aciuni se face prin poziionareacursorului n zona corespunztoare i apsarea unuia dintre butoaneleaflate pe partea posterioar. Iniial un mouse avea dou sau treibutoane. Acum exist mouse-uri cu 5 butoane i 2 rotie ce ndeplinesc

    o serie de funcii corespunztoare unor taste speciale.Folosirea mouse-ului uureaz mult munca utilizatorilor,

    nemaifiind necesar ca acetia s memoreze numrul relativ mare decomenzi corespunztor fiecrui produs, ca n situaia n care sefolosete numai tastatura. Utilitatea mouse-ului este i mai evident ncazul aplicaiilor grafice. De altfel, WINDOWS este un sistem deoperare creat special pentru lucrul cu mouse-ul.

    Scanner-ul reprezint dispozitive care se cupleaz la un PC i

    cu care, prin intermediul unui software adecvat, se pot capta imagini,fotografii, texte etc., n vederea unei prelucrri ulterioare. Astfel se potmanevra imagini foto, se pot crea efecte grafice speciale, care nu sepot obine prin metode tradiionale. Dup captare, imaginea poate fiprelucrat, mutat, mrit, micorat, rotit, colorat, umbrit,suprapus cu alt imagine etc.

    Cu un software de recunoatere optic a caracterelor datele saudocumentele tiprite pe coli de hrtie pot fi transformate n fiiere,putndu-se realiza chiar o stocare a lor sub form de arhiv.

  • 8/6/2019 Carte_C_2003

    18/278

    12

    Monitorul - Sistemul video este format din dou pri: unadaptor (plac) video i un monitor sau display. Adaptorul videoreprezint dispozitivul care realizeaz legtura (interfaa) cucalculatorul i se afl n interiorul acestuia. El va fi corespunztor

    tipului de monitor video care i este ataat. Adaptorul video realizeazo rezoluie orizontali una vertical. Rezoluia reprezint numrul deelemente, n cazul de fa puncte pixeli care pot fi afiate pe ecran.De exemplu, un monitor VGA, n mod video, are o rezoluie de 640 x480 pixeli.

    Standardul VGA (Video Graphics Array) a fost introdus dectre IBM o dat cu calculatoarele PS/2, iar modurile video VGAreprezint un superset al standardelor video anterioare, CGA (ColorGraphics Adapter) i EGA (Enhanced Graphics Adapter). Cea maiimportant mbuntire adus de standardul VGA a fost rezoluiasuperioar a caracterelor n modul text, precum i posibilitatea de aafia 256 de culori la un moment dat.

    Monitorul, denumit uneori i display, permite vizualizareadatelor introduse de la tastatur sau rezultate n urma execuiei unorcomenzi sau programe, fiind ncadrat n categoria echipamentelorperiferice de ieire. Ca pies principal, monitorul conine un tub devacuum, similar cu cel de la televizor i trei tunuri de electroni

    (corespunztoare celor trei culori fundamentale).Standardele video MDA, CGA i EGA folosesc monitoare

    digitale. Datele care descriu culorile pixelilor sunt trimise de adaptorulvideo la monitor sub forma unor serii de semnale digitale care suntechivalente unor serii de bii.

    Standardul VGA a introdus un nou tip de monitor careutilizeaz semnale analogice pentru transferul informaiilor privindculoarea de la adaptorul video la monitor. Dac semnalele digitale

    prezint niveluri care indic prezena sau absena unui bit, semnaleleanalogice pot prezenta orice valoare ntre una minimi una maxim.Imprimanta - Reprezint un dispozitiv care poate fi ataat unui

    calculator, cu scopul tipririi de texte i grafic, putnd fi consideratun fel de main de scris automat. Pn n prezent au fost realizate unnumr destul de mare de tipuri de imprimante pentru PC-uri, elediferind att prin performane, ct i prin modalitile tehnice deralizare. Fiecare dintre ele prezint avantaje i dezavantaje, ideal fiinda o folosi pe cea care corespunde cel mai bine tipului de lucrri

  • 8/6/2019 Carte_C_2003

    19/278

  • 8/6/2019 Carte_C_2003

    20/278

    14

    comune marii majoriti a programelor de aplicaie: alocareamemoriei, afiarea caracterelor pe ecran i la imprimant, citireacaracterelor de la tastatur, accesul la informaiile stocate pe discmagnetic, etc.

    1.3.1. Sistemul de operareSistemul de operare este o parte component a software-ului

    unui calculator, care mai cuprinde un numr variabil de programeutilitare selectate conform cu necesitile programatorilor.

    Sistemul de operare este un program cu funcii de coordonare icontrol asupra resurselor fizice ale calculatorului i care intermediazdialogul om-calculator. Sistemul de operare permite rulareaprogramelor i pstrarea informaiilor pe disc. n plus, fiecare sistem

    de operare pune la dispoziia aplicaiilor o serie de servicii care permitprogramelor s aloce memorie, s acceseze diferite echipamenteperiferice, cum ar fi imprimanta, i s gestioneze alte resurse alecalculatorului.

    Un sistem de operare trebuie s aib capacitatea de a se adaptarapid la modificrile tehnologice, rmnnd n acelai timp compatibilcu hardware-ul anterior. Lanul de comunicare utilizator calculatoreste prezentat n Figura 1.3:

    Sistemul de operare este cel mai important program care ruleazpe un calculator. Orice calculator de uz general este dotat cu un sistemde operare care permite execuia altor programe. Sistemele de operareexecut operaiuni de baz precum: recunoaterea unei intrri de latastatur (preluare caracter), trimiterea unui caracter pentru afiare peecranul monitorului, gestionarea fiierelor i a directoarelor pe disc(floppy-disk sau hard-disk), controlul fluxului de date cuechipamentele periferice ca drivere de disc sau imprimante.

    UTILIZATOR

    APLICA II

    SISTEM D EO PE R A R E

    CALCULATOR

    Fig. 1.3. Comunicarea utilizator - calculator

  • 8/6/2019 Carte_C_2003

    21/278

    15

    Sistem deoperare

    Aplicaie

    Tastatur

    Imprimant

    MonitorMouse

    Disk-drive

    Fig. 1.4 Rolul sistemului de operare

    Sistemul de operare al unui calculator este partea de softwarenecesari suficient pentru execuia oricror alte aplicaii dorite deutilizator. Un calculator nu poate funciona dect sub gestiunea unuisistem de operare. Orice aplicaie lansat n execuie de ctre unutilizator apeleaz la resursele puse la dispoziie de ctre sistemul deoperare. Sistemul de operare interfaeaz calculatorul cu operatorul

    uman de o manier ct mai transparent cu putin astfel nctutilizatorul nu trebuie s fac eforturi mari de adaptare dac lucreazcu arhitecturi hardware diferite.

    Pentru sisteme mai mari, sistemele de operare auresponsabiliti i capabiliti i mai mari. Ele acioneaz ca ungestionar al traficului de date i al execuiei programelor. n principalsistemul de operare asigur ca diferite programe i diferii utilizatoris nu interfereze unele cu altele. Sistemul de operare este de asemenearesponsabil cu securitatea, asigurnd inaccesibilitatea persoanelorneautorizate la resursele sistemului.

    Sistemele de operare se pot clasifica dup cum urmeaz: multi-user: Permit ca doi sau mai muli utilizatori s ruleze n

    acelai timp programe (utilizatori concureni). Anumite sisteme deoperare permit sute sau chiar mii de utilizatori concureni.

    multiprocesor: Permit execuia unui program pe mai mult de unmicroprocesor.

    multitasking: Permit mai multor programe s ruleze n acelai

    timp (execuie concurent).

  • 8/6/2019 Carte_C_2003

    22/278

    16

    multithreading: Permit diferitelor pri ale unui program s fieexecutate concurent.

    timp real (real time): Rspund instantaneu la diferite intrri.Sistemele de operare de uz general, ca DOS sau UNIX nu sunt sisteme

    de operare de timp real.Sistemele de operare furnizeaz o platform software pe bazacreia alte programe, numite programe de aplicaie, pot rula (pot fiexecutate). Programele de aplicaie trebuie s fie scrise pentru a rulape baza unui anumit sistem de operare. Alegerea unui anumit sistemde operare determin n consecin mulimea aplicaiilor care pot firulate pe calculatorul respectiv. Pentru PC-uri, cele mai popularesisteme de operare sunt DOS, OS/2 sau Windows, dar mai suntdisponibile i altele precum Linux.

    Ca utilizator se interacioneaz cu sistemul de operare prinintermediul unor comenzi. Spre exemplu, sistemul de operare DOSaccept comenzi precum COPY sau RENAME pentru a copia fiieresau pentru a le redenumi. Aceste comenzi sunt acceptate i executatede o parte a sistemului de operare numit procesor de comenzi sauinterpretor de linie de comand.

    Interfaele grafice cu utilizatorul (GUI, Graphical userinterfaces) permit introducerea unor comenzi prin selectarea i

    acionarea cu mouse-ul a unor obiecte grafice care apar pe ecran. Spreexemplu, sistemul de operare Windows are un desktop ca intefagarfic cu utilizatorul. Pe acest desktop (birou) se afl diferitesimboluri grafice (icoane, icons) ataate diferitelor aplicaiidisponibile pe calculatorul respectiv. Utilizatorul are multipleposibiliti de configurare a acestei intefee grafice.

    Primul sistem de operare creat pentru calculatoare a fost CP/M(Control Program for Microcomputers), realizat pentru calculatoarele

    pe 8 bii. O dat cu perfecionarea componentelor HARD s-a impus inecesitatea dezvoltrii unui SOFT adecvat. Astfel, n 1981, a aprutprima versiune a sistemului de operare MS-DOS. Sistemul de operareMSDOS (MicroSoft Disk Operating System) este destinatgestionrii resurselor software si hardware ale microcalculatoarelor cuo arhitectura de tip IBM PC sau compatibil cu aceasta i echipatecu procesoare 8086 sau 80x86, Pentium. Odat cu cretereacapabilitilor hardware ale calculatoarelor, acesta s-a transformat,prin dezvoltri succesive, n Windows.

  • 8/6/2019 Carte_C_2003

    23/278

    17

    Indiferent de sistemul de operare utilizat, din punctul de vedereal utilizatorului, informaiile sunt scrise pe disc sub forma unor fiiere.Un fiier este o colecie de informaii grupate sub acelai nume. Unfiier poate fi un program executabil, un text, o imagine, un grup de

    comenzi sau orice altceva.Un fiier este identificat prin numele su. Numele unui fiiereste format dintr-un ir de caractere (care n funcie de sistemul deoperare este limitat la un anumit numr maxim de caractere), urmateeventual de semnul punct (.) i de nc maximum 4 caractere, numiteextensie, ca de exemplu: nume.ext.

    Pentru a putea avea acces rapid la fiiere, sistemul de operarecreeaz nite fiiere speciale, numite directoare, care pot fi asemnatecu cuprinsul unei cri, deoarece ele conin numele fiierelor i adresade nceput a acestora. De asemenea, un director poate conine larndul su alte directoare crendu-se astfel o structur arborescent dedirectoare n care poate fi gsit foarte repede un anumit fiier.

    1.3.2. Tipuri de fiiereFiierele se pot mpri n dou categorii executabile i

    neexecutabile. n prima categorie intr acele fiiere al cror nume scris n dreptul prompterului (n cazul sistemului de operare DOS)

    determin executarea unor activiti de ctre sistemul de operare. Oparte dintre fiierele executabile sunt programe i sunt recunoscuteprin extensia lor care poate fi EXE sau COM, altele fiind constituite

    n fiiere de comenzi proprii sistemului de operare, a cror extensieeste BAT.

    Fiierele COM, numite adesea i comenzi, conin informaii nformatul imagine de memorie. Ele sunt mai compacte i mai rapidedect fiierele EXE, dar lungimea lor nu poate s depeasc 64 K.Fi

    ierele EXE pot s

    ajung

    la dimensiuni mai mari prin segmentarea

    programului n fragmente a cror dimensiune s fie de maximum 64K.Dintre fiierele neexecutabile vom aminti cteva mai

    importante: fiiere text ; fiiere cu extensia SYS sau DRV, cunoscute sub numele de

    driver-e i care conin instruciuni despre modul n care sistemul deoperare trebuie s controleze diferite componente hardware;

    surse de programe scrise n diferite limbaje (cu extensiile PAS limbajul Pascal, C limbajul C, CPP limbajul C++, etc.);

  • 8/6/2019 Carte_C_2003

    24/278

    18

    fiiere care conin informaii intermediare ntre cele n limbajsursi cele executabile (extensiile OBJ, OVL);

    fiiere ce conin imagini (extensiile JPEG, GIF, BMP); fiiere ce conin sunete (extensiile WAV, MIDI, MP3) etc.

    1.3.3. Construirea fiierului executabilInstruciunile pe care le execut un calculator sunt de fapt

    grupuri de 1 0 (cifre binare) care reprezint semnale electroniceproduse n interiorul calculatorului. Pentru a programa primelecalculatoare (n anii 1940-1950), programatorii trebuiau s neleagmodul n care calculatorul interpreta diferitele combinaii de 0 i 1,deoarece programatorii scriau toate programele folosind cifre binare.Cum programele deveneau din ce n ce mai mari, acest mod de lucru a

    devenit foarte incomod pentru programatori. De aceea au fost createlimbaje de programare care permit exprimarea instruciunilorcalculatorului ntr-o form mai accesibil programatorului. Dup ceprogramatorul scrie instruciunile ntr-un fiier - numitfiier surs, unal doilea program numit compilator, convertete instruciunilelimbajului de programare n irurile 1 i 0 cunoscute sub numele decod main.

    Pentru a obine un program executabil, orice program surs

    trebuie eventual translatat (tradus) n limbaj cod mainsau cod obiectpe care l poate nelege microprocesorul. n urma acestui proces,alturi de fiierul surs apare i fiierul cod obiect (object file.)Aceast translatare sau traducere este efectuat de ctre compilatoare,interpretoare sau asambloare.

    Compilatorul este folosit pentru transformarea codului surs,adic a programului scris ntr-un limbaj de programare de nivel nalt,

    n cod obiect(object code). Acest cod obiect va fi transformat n faza

    de editare de legturi n cod main executabil de microprocesorulsistemului de calcul.Programatorii scriu programe ntr-o form numit cod surs.

    Acest cod surs parcurge apoi civa pai nainte de a deveniprogramexecutabil.

    Pe scurt, un compilatoreste un program special care proceseazinstruciuni scrise ntr-un limbaj de programare particular i letransform n limbaj mainsau cod main pe care l poate executamicroprocesorul.

  • 8/6/2019 Carte_C_2003

    25/278

    19

    La ora actual un limbaj de programare este inclus ntr-unmediu de programare mai complex care include un editor de textepentru introducerea instruciunilor n limbajul de programare de nivel

    nalt, un compilatori un editor de legturi folosite pentru translatarea

    codului sursn cod main.n mod tipic, un programator scrie declaraii ntr-un limbajprecum Pascal, C sau MATLAB folosind un editor. Se creeaz astfelun fiier numitfiier cod sursce conine o colecie de instruciuni ideclaraii scrise n limbajul respectiv.Primul pas este prelucrarea codului surs de ctre compilator, caretranslateaz instruciunile de nivel nalt ntr-o serie de instruciuni codobiect. Cnd este lansat n execuie compilatorul acesta, ntr-o primetap,lanseaz un analizor sintactic, gramatical, numitparser. Acestaparcurge i analizeaz sintactic, secvenial, n ordinea n care au fostintroduse, toate instruciunile scrise n limbajul de nivel nalt. Oinstruciune de nivel nalt se translateaz ntr-una sau mai multeinstruciuni specifice microprocesorului pentru care a fost conceputcompilatorul. Aceste instruciuni ale microprocesorului sunt nlocuitecu codurile lor binare, fiecare instruciune a microprocesorului fiindcodificat de ctre constructor. Codurile binare ale instruciunilormicroprocesorului mpreun cu reprezentrile interne ale datelor

    manipulate formeazcodul obiect.Deci n unul sau mai multe faze (parserul este una dintre faze)

    din codul surs de intrare se produce un cod de ieire, numit n modtradiional cod obiect. Este foarte important ca referiri la alte modulede cod s fie corect reprezentate n acest cod obiect.

    Pasul final n producerea programului executabil, dup cecompilatorul a produs codul obiect, este prelucrarea codului obiect dectre un editor de legturi (link-editor sau linker). Acest linker

    combin diferitele module (le leag) i d valori reale, efective, tuturoradreselor simbolice existente n codul obiect. n urma acesteiprelucrri se obine codul main, salvat ntr-un fiier cu extensia .exe.Acest cod main poate fi executat secvenial, instruciune cuinstruciune, de ctre microprocesor.

    Cu alte cuvinte, un program executabil (executable program -aflat pe disc cu extensia .exe) se obine prin salvarea pe disc a coduluimain obinut prin prelucrarea succesiv a fiierului cod surs dectre compilator (compiler) i apoi de ctre link-editor (linker).

  • 8/6/2019 Carte_C_2003

    26/278

    20

    Fig. 1.5 Procesul de elaborare a unui program executabil

    Procesul de obinere a unui executabil este prezentat n figurade mai jos. Blocurile tridimensionale reprezint entitile principaleale mediului de programare: editorul de texte, compilatorul (compiler)i editorul de legturi (linker). Blocurile dreptunghiulare reprezintfiierele rezultate n urma aplicrii celor trei utilitare de sistem:

    n urma utilizrii editorului de texte obinem fiierul text surs

    cod cu numele generic nume. Dac folosim limbajul de programareC spre exemplu, se obine fiierul nume.c care se va salva pe disc.

    n urma lansrii n execuie a compilatorului, acesta preiafiierul surs i l prelucreaz corespunztor, semnalizndu-se toateerorile fatale pentru program sau avertismente utile programatorului nprocesul de depanare. n cazul n care compilarea se efectueaz cusucces, se obine un fiier cod obiect, salvat pe disc sub numelenume.obj

    n urma lansrii n execuie a editorului de legturi, se preiafiierul cod obiect nume.obj i se leag cu toate modulele necesare(inclusiv funcii de bibliotec sau alte module externe), obinndu-seun program executabil (cod main) cu numele nume.exe la careadresele nu mai sunt simbolice ci absolute relativ la adresa de nceputa programului. La lansarea n execuie a programului fluxul deinformaie este complet controlat de ctre microprocesor, toatesalturile de adres fiind fcute corespunztor.

    Interpretorul (interpreter) este un program care executinstruciuni scrise ntr-un limbaj de nivel nalt. Numai anumite limbaje

  • 8/6/2019 Carte_C_2003

    27/278

    21

    de nivel nalt, spre exemplu BASIC, LISP sau MATLAB, suntprevzute cu un interpretor.

    Exist dou modaliti de a executa un program scris n limbajde nivel nalt. Cel mai comun mod este acela de a compila programul.

    Cealalt modalitate este pasarea programului unui interpretor.Un interpretor translateaz instruciunile de nivel nalt ntr-o formintermediar care este apoi executat. Prin contrast, un compilatortranslateaz instruciunile de nivel nalt direct n limbaj main (codmain). Programele compilate ruleaz n general mai rapid dect celeinterpretate. Un alt avantaj al programelor compilate este acela aldesprinderii din context n sensul c programele executabile generate

    n urma procesului de compilare pot fi executate direct sub sistemul deoperare al calculatorului. Un program interpretat se execut submediul n care a fost creat.

    Spre exemplu, pentru a rula un program scris n limbajulBASIC se lanseaz n execuie mediul BASIC, apoi se deschidefiierul surs-BASIC corespunztor i se lanseaz interpretorul deBASIC pentru execuia sa.

    Avantajul unui interpretor este acela al evitrii procesului decompilare consumator de timp n cazul n care avem programe de maridimensiuni. Interpretorul poate executa imediat programele surs.

    Pentru acest motiv interpretoarele se folosesc mai ales n procesul dedezvoltare al programelor, cnd programatorul dorete adugarea unormici poriuni de program pe care s le testeze rapid. De asemenea,interpretoarele permit o programare interactiv fiind des folosite nprocesul de instrucie.

    n mediul de programare MATLAB, mediu interpretor, oricecomand utilizator se execut imediat. Se pot edita i fiiere script,care conin secvene de comenzi care se execut secvenial.

    Programele de descriere a paginii (Page Description Languages)ca PostScript spre exemplu folosesc un interpretor. Fiecareimprimant PostScript are incorporat un interpretor care executinstruciuni PostScript.

    Asamblorul (assembler) este un program care face translaiaunui program scris n limbaj de asamblare (limbaj de nivel sczut,corespunztor microprocesorului sistemului de calcul) n limbaj codmain. Putem spune c asamblorul reprezint pentru limbajul deasamblare ceea ce reprezint compilatorul pentru limbajele de nivel

    nalt. Cum limbajul de asamblare conine instruciuni mai puin

  • 8/6/2019 Carte_C_2003

    28/278

    22

    complexe dect cele de nivel nalt, asamblorul face practic oconvertire biunivoc ntre mnemonicele limbajului de asamblare icodurile binare corespunztoare acestor mnemonice (instruciuni).

    E d i to r d e t e x t e( e ve n tua l inc o rp ora t n m e d iu )

    L i n k - e d i t a r e( l e ga re a t u tu ro r modu le lo r ne c e sa re )

    L a n s a r e a n e x e c u ie d e c t r es is t e m u l d e o p e r a r e

    a e xec utab ilu lu i n u m e . e x e

    F i ier text ( f i ie r s u rs )c u e x t e n s ia a d e c v a t :

    n u m e .p a s ( lim b a j P a s c a l)n u m e .c (lim b a j C )

    n u m e .c p p ( lim b a j C + + )n u m e .b a s ( lim b a j B A S I C ) , e t c .

    Ins t ruc iunile n limbajulde nivel nal t se introducd e la t a s t a tu r .

    T o t c e s e in tr o d u c e d e latas ta tur es te v iz ib il p e m o nitor

    F i ie ru l surs c u num ele n u m e i exten siac o r e s p u n z t o a r e s e s a lv e a z d in m e m o r ia R A M p e h a rd d is k

    C o m p i l a t o rS e c o m p ile a z fi ie rul sur s

    S e o b ine fi ierul c o d o b ie c t : n u m e . o b j

    S e s a lv e a z p e h a r d d is k fi ieruln u m e .o b j

    S e o b ine fi ierul c o d m a in ( e x e c u t a b i l ) :

    n u m e . e x e S e s a lv e a z p e h a r d d is k fi ierun u m e . e x e

    Fig. 1.6 Detalierea procesului de generare a unui executabil

  • 8/6/2019 Carte_C_2003

    29/278

    23

    Capitolul II

    REPREZENTAREA DATELOR N

    CALCULATOR

    Se tie c un calculator numeric prelucreaz numere binare.Acest lucru ine de suportul fizic de manipulare, transport i stocare adatelor interne, mai bine zis este legat de faptul c semnalul fizicpurttor de informaie este o tensiune continu cu dou valori: una

    nalt (High) i una joas (Low). Acestor dou valori li se asociaznatural dou valori logice: T (true, adevrat) i F (false, fals) sau celedoucifre binare1 i 0.

    timp

    Tensiune

    High=1

    L ow = 0

    Ca urmare a acestei asocieri spunem, prin abuz de limbaj, c uncalculator numeric prelucreaz numere binare. Ca i un numrzecimal, un numr binar are mai multe cifre binare. Sistemul denumeraie binar folosit pentru reprezentarea informaiei n calculatoareeste un sistem de numeraie ponderal, ntocmai ca sistemul denumera

    ie zecimal.

    Reprezentarea natural a numerelor la nivelul percepiei umaneeste cea zecimal, pe cnd reprezentarea proprie mainilor de calculeste cea binar. De aici rezult necesitatea compatibilizrii sauinterfarii ntre aceste dou moduri de reprezentare a numerelor. Cumcele dou sisteme de numeraie sunt ponderale, o prim diferen esteaceea c sistemul zecimal folosete ca ponderi puterile ntregi(pozitive sau negative) ale lui 10 (zece) iar sistemul binar va folosiputerile ntregi (pozitive sau negative) ale lui 2.

  • 8/6/2019 Carte_C_2003

    30/278

  • 8/6/2019 Carte_C_2003

    31/278

    25

    - cum se reprezint intern un numr natural- cum se reprezint extern un numr ntreg negativ- cum se reprezint intern un numr ntreg negativ- cum se face conversia de la reprezentarea extern la cea

    intern- cum se face conversia de la reprezentarea intern la ceaextern

    2.2. Reprezentarea extern a numerelor

    n ceea ce privete reprezentarea extern, nu sunt nici un fel dedificulti deoarece fiecare este familiarizat cu reprezentarea zecimala numerelor naturale sau reale. Trebuie menionat de la nceput corice tip de reprezentare pe care o vom folosi esteponderaln sensul

    c poziia cifrelor n numr nu este ntmpltoare ci conform cu opondere corespunztoare unei puteri a bazei de numeraie.

    O caracteristic a reprezentrilor externe este folosirea unorconvenii de format unanim acceptate i de altfel foarte naturale pentruun utilizator uman. Spre exemplu, pentru a exprima numere negativese folosete semnul - iar pentru reprezentarea numerelor reale sefolosete punctul . pentru delimitarea prii ntregi de ceafracionar. De asemenea, suntem familiarizai i cu notaia tiinific

    n care intervine mantisa i exponentul (n virgul mobil).Reprezentarea zecimaleste cea mai natural pentru utilizatorul

    uman. Vom oferi n continuare cteva exemple de reprezentrizecimale externe:

    Numr Reprezentarenormal

    Reprezentaretiinific

    37 37 0.37x102

    -37 -37 -0.37x102

    0.375 0.375 0.375x10

    0

    -0.375 -0.375 -0.375x100

    0.00375 0.00375 0.375x10-2

    -0.00375 -0.00375 -0.375x10-2

    12.375 12.375 0.12375x102

    -12.375 -12.375 -0.12375x102

    n general dorim s obinem rezultatele numerice aleprogramelor pe care le concepem ntr-o form de reprezentareaccesibil. Totui, calculatorul trebuie informat asupra formatului de

    reprezentare n care dorim s se afieze datele necesare. Aceasta

  • 8/6/2019 Carte_C_2003

    32/278

    26

    nseamn c va trebui s specificm cte cifre se vor folosi la parteantreag i cte la partea fracionar sau dac dorim reprezentaretiinific sau nu. De altfel i operatorul uman face aceleai convenii

    de reprezentare. Spre exemplu tim c numrul

    3

    1nu poate fi exact

    reprezentat ca un numr zecimal, deci fixm un format dereprezentare. Dac formatul ale se limiteaz la 4 cifre zecimale, atunci

    vom scrie 3333.03

    1

    Limbajul C are o serie de funcii de reprezentare cu formatadatelor numerice sau alfanumerice prin care programatorul poateimpune un format extern cu care se manipuleaz datele.

    2.2.1. Reprezentarea extern a numerelor ntregiNumerele naturale se pot reprezenta fie n baza de numeraie 10,

    fie n orice alt baz.n general, un numr ntreg n baza b se poate reprezenta cu un

    numr predeterminat de cifre { }1,2,.....,2,1,0 = bbBci .Mulimea B reprezint mulimea cifrelor sau simbolurilor dereprezentare. Spre exemplu:

    { }{ }

    { }9,8,7,6,5,4,3,2,1,010

    6,5,4,3,2,1,071,02

    ==

    ====

    Bb

    BbBb

    Noi suntem obinuii s folosim mulimea cifrelor zecimale.Dac totui se folosete o baz de reprezentare mai mare dect 10,atunci mulimea cifrelor zecimale nu mai este suficient pentrureprezentarea numerelor n acea baz. Spre exemplu s considermbaza b = 16 care va folosi 16 cifre hexazecimale (sau mai simpluhexa). Prin convenie, cele 16 cifre hexazecimale vor fi:

    Cifra Simbol Cifra Simbol0 0 8 81 1 9 92 2 10 A

    3 3 11 B4 4 12 C

    5 5 13 D

    6 6 14 E

    7 7 15 F

  • 8/6/2019 Carte_C_2003

    33/278

    27

    Forma general de reprezentare extern a numerelor ntregi estede forma:

    { }

    =

    =

    1,2,.....,2,1,0

    ...... 01221bbBc

    cccccN

    k

    nnb

    Valoarea numeric zecimal a numrului bN va fi:

    ( )

    =

    =++++=

    1

    0

    00

    11

    22

    11 ...

    n

    k

    kk

    nn

    nnb bcbcbcbcbcN

    n continuare vom studia urmtoarele probleme:- cum se face conversia unui numr din baza 10=b n baza

    2=b

    - cum se face conversia invers, din baza 2=b n baza 10=b - cum se face conversia dintr-o baz oarecare 1b n alt baz 2b Pentru a reprezenta un numr natural din baza 10 n baza 2, se

    mparte succesiv numrul la 2 i se utilizeaz resturile la acestempriri n ordinea invers de cum au fost obinute.

    a) Conversia din baza 10 n baza 2 i inversFie de exemplu numrul zecimal 37. Reprezentarea sa binar va fi

    obinut astfel:

    3710 = 10010123736

    2

    18 2

    1 18 9 20 8

    1

    4 2 4

    0

    2 22 10

    Conversia invers, din baza 2 n baza 10 este simpl iutilizeaz ponderea 2:

    1001012 =25 24 23 22 21 201 0 0 1 0 1 = 1x25 + 1x22 +1x20=37

    Cu aceste numere naturale putem face o serie de operaiiaritmetice. Adunarea numerelor naturale binare se face ntocmai ca lacele n reprezentare n baza 10, dup regula:

    0+0=0

  • 8/6/2019 Carte_C_2003

    34/278

    28

    0+1=11+0=11+1=0, transport 1 spre rangul urmtor

    Astfel, s facem adunarea 37+25 n binar:1 0 0 1 0 1+

    1 1 0 0 11 1 1 1 1 0

    372562

    Se observ cum se obine rezultatul corect.nmulirea se face n mod asemntor, ca o adunare repetat.

    Spre exemplu, s calculm 37x25

    1 0 0 1 0 1x1 1 0 0 1

    1 0 0 1 0 11 0 0 1 0 1

    1 0 0 1 0 11 1 1 0 0 1 1 1 0 1

    3725

    925

    11100111012 = 1x20 + 1x22 + 1x23 +1x24 +1x27 +1x28+1x29 =

    1+4+8+16+128+256+512 = 92510b) Conversia dintr-o baz oarecare 1b ntr-o alt baz 2b .

    Fie spre exemplu numrul 1149 care se dorete scris n baza 13.Pentru a realiza aceast conversie, vom folosi baza intermediar 10.Vom converti mai nti 114A n baza 10 i apoi numrul zecimalobinut l vom trece n baza 13. Se observ cum un numr n baza 11poate conine i cifra A=10 iar un numr n baza 13 poate coninecifrele A=10, B=11, C=12.

    1010

    11 54104411411104 =+=+=A

    5452 134 13

    2 0 04

    1311

    1310

    424

    4253

    =

    =

    A

  • 8/6/2019 Carte_C_2003

    35/278

    29

    2.2.2. Reprezentarea extern a numerelor reale

    Semnificativ pentru utilizatorul uman este reprezentareazecimal (n baza b=10) a numerelor reale, cu care suntem obinuii.Fa de reprezentarea numerelor ntregi, la numerele reale intervinesimbolul punct . care delimiteaz partea ntreag de parteafracionar. Cu alte cuvinte, cu ajutorul numerelor reale putemreprezenta i numere care nu sunt ntregi. Forma general a unuinumr real reprezentat ntr-o baz oarecare b este:

    { }

    =

    = +

    1,2,...,2,1,0

    ...... 1210121bbBc

    ccccccccN

    k

    mmnnb

    Valoarea zecimal a numrului de mai sus va fi:

    ( )

    =

    ++

    =+++++++=

    111

    22

    11

    00

    11

    22

    1110

    n

    mk

    kk

    mm

    mm

    nn

    nn bcbcbcbcbcbcbcbcbcN

    Se observ cum punctul delimiteaz partea ntreag (exprimatprintr-o combinaie de puteri pozitive ale bazei b) i partea fracionar(exprimat printr-o combinaie de puteri negative ale bazei b).

    Semnificaie pentru programator i pentru productorii desoftware sau microprocesoare au bazele de reprezentare 10=b i

    2=b , deoarece baza 10 este natural

    pentru reprezentarea extern

    anumerelor iar baza 2 este natural pentru reprezentarea binar, intern,a numerelor.

    n formulele de mai sus avem o reprezentare a unui numr realcu n cifre pentru partea ntreagi m cifre pentru partea fracionar.

    Aa cum n sistemul zecimal reprezentm cu un numr finit decifre zecimale numerele reale, acelai lucru se va ntmpla i nsistemul binar. Punctul binar va avea o semnificaie asemntoare cupunctul zecimal, care face separarea ntre partea ntreag i ceafracionar. Cifrele binare situate dup punctul binar vor corespundeputerilor negative ale lui 2.Astfel, n general, un numr real va avea reprezentarea binar:

    ( )nnm

    mm

    mnmm bbbbbbbbbbbbbbN

    +++++++== 2...222222....... 22

    11

    00

    11

    11210112

    Spre exemplu, numrul 12.25 va avea reprezentarea binar:223

    10 22201.110025.12

    ++==

  • 8/6/2019 Carte_C_2003

    36/278

    30

    Partea ntreag a unui numr real se reprezint binar precumnumerele ntregi (cu sau fr semn). Pentru a determina parteafracionar, se procedeaz n mod invers ca la partea ntreag.

    Astfel, dac partea fracionar zecimal se reprezint binar,

    atunci aceasta se nmulete succesiv cu 2. Dac rezultatul depetevaloarea 1, atunci se nscrie un bit 1. Se continu mai departe cudublarea valorii care depete 1. Dac rezultatul nu depetevaloarea 1, atunci se nscrie un bit 0 i se continu multiplicarea cu 2.Spre exemplificare, vom vedea cum se obine reprezentarea binar alui 12.25. Partea ntreag este 12. Ea se reprezint binar prin mpririsuccesive la 2 i considerarea resturilor. Partea fracionar este 0.25

    Parteafracionar

    P.F.

    P.F. x 2 NouaP.F.

    Bitulnscris

    0.25 0.5 00.5 1 0 10

    Obinem exact rezultatul cutat: 12.25 = 1100.01S mai considerm un alt exemplu. S reprezentm numrul 5.37Partea ntreag are reprezentarea 510 =1012

    Partea

    fracionar P.F.

    P.F. x 2 Noua

    P.F.

    Bitul

    nscris0.37 0.74 0.74 0

    0.74 1.48 0.48 1

    0.48 0.96 0.96 0

    0.96 1.92 0.92 1

    0.92 1.84 0.84 1

    0.84 1.68 0.68 1

    0.68 1.36 0.36 1

    0.36 0.72 0.72 0

    0.72 1.44 0.44 1

    Etc.. Etc..

    Obinem: 5.3710 = 101.010111101...2Cu ct mai multe cifre binare vom reine dup punctul binar, cu attvom fi mai aproape de valoarea exact 5.37.

    Obinem un rezultat foarte important: Dei un numr zecimal poate avea un numr finit de cifre zecimale dup punctul zecimal,reprezentarea sa binar intern poate avea un numr infinit de cifre

    binare. Este valabili reciproca: un numr real zecimal cu un numr

  • 8/6/2019 Carte_C_2003

    37/278

  • 8/6/2019 Carte_C_2003

    38/278

    32

    corespunztor ponderii celei mai mici, situat cel mai n dreapta, senumete LSB ( Less Significand Bit). n cazul reprezentrii binare anumerelor naturale, reprezentarea extern (cea perceput de operatoruluman) i cea intern (cea prelucrat de procesorul calculatorului) sunt

    asemntoare. Cum pentru operatorul uman operatorii + sau -semnific faptul c un numr este pozitiv sau negativ, este necesaroconvenie pentru reprezentarea interna numerelor ntregi negative.

    Aceast convenie prevede folosirea MSB pentru reprezentareasemnului numerelor ntregi. Dac numrul este pozitiv, se adaug npoziia MSB bitul de semn 0, iar dac numrul este negativ seutilizeaz n poziia MSB bitul de semn 1. Mai mult, numerelenegative se reprezint n aa numitul complement fade 2.

    Reprezentarea numerelor ntregi negative n complement fade 2Aceast form de reprezentare a numerelor negative necesitparcurgerea urmtorilor pai:

    pas1. Se reprezint modulul numrului negativ, folosind bit desemn (egal cu 0, evident)

    pas2. Se complementeaz toi biii numrului astfel obinut.Complementarea nseamn transformarea bitului 0 nbitul 1 i a bitului 1 n bitul 0.

    pas3. Numrul astfel obinut se adun cu 1.De exemplu, s reprezentm numrul -37.

    pas1. |-37| = 37 [ ] 100101010010137 210semnbit

    ==

    pas2. 0100101---->1011010pas3. 1011010 + 1 = 1011011 => -3710 = 10110112

    Evident, MSB este bitul de semn i este egal cu 1.La o prim vedere, este posibil s credem c prin utilizarea

    complementului fa de 2 putem pierde semnificaia numruluinegativ. Pentru a vedea ce numr negativ este reprezentat, putemrepeta procedeul de mai sus i obinem reprezentarea numruluipozitiv dat de modulul su.

    O modalitate mai simpl este alocarea ponderii corespunztoarebitului de semn dar pe care o considerm c reprezint un numrnegativ. Astfel:10110112 = -1x2

    6 + 1x24 + 1x23 + 1x21 + 1x20 = -64 + 27 = -37

  • 8/6/2019 Carte_C_2003

    39/278

    33

    2.3.2 Adunarea, scderea i nmulirea numerelor ntregi

    Aceste operaii se execut folosind reprezentarea n complementfa de 2 a numerelor ntregi, sau, mai bine zis, se execut folosind nalgoritmi bitul de semn ca pe un bit obinuit.De exemplu, dorim s calculm:

    37-2525-37

    (-25)x37(-25)x(-37)

    Pentru efectuarea acestor calcule, vom scrie reprezentrile cu bitde semn ale numerelor implicate:

    =

    ==

    =

    ==

    101101137

    010010110010137

    10011125

    0110011100125

    10

    210

    210

    210

    Se observ c 25 i (-25) se reprezint pe 6 bii iar 37 i (-37) pe7 bii.

    Deoarece am observat c biii unui ntreg cu semn nu au toiaceeai semnificaie, este nevoie s reprezentm numerele cu care

    lucrm pe un acelai numr de bii. La adunri sau scderi, biii desemn se vor afla n aceeai poziie (vor avea aceeai pondere) i vomobine astfel rezultate corecte. Pentru a avea o scriere pe un acelainumr de bii, se adaug (completeaz) la stnga bitul de semn de unnumr corespunztor de ori. Astfel:

    ==

    ==

    001100101100125

    110011110011125

    2

    210

    10120001100

    1100111

    0100101

    11001110100101)25(372537

    =

    +

    +=+=

    ==

    =

    001100101100125

    101101137

    2

    1252641110100

    1011011

    0011001

    10110110011001)37(253725

    =+=

    +

    +=+=

  • 8/6/2019 Carte_C_2003

    40/278

    34

    n continuare vom pune n eviden importana gamei dereprezentare, adic a domeniului de valori ale datelor. S considerm,spre exemplu, adunarea a dou numere cu semn reprezentate pe unoctet (8 bii). Aceste numere sunt cuprinse n gama

    [ ] [ ]127,12812,2 77 = .Dac vom dori s adunm dou numere din acest domeniu i sreprezentm rezultatul tot pe un octet, putem avea surprize. Deexemplu, s considerm operaiile (117-12) i (117+12). Se observ coperanzii sunt n gama de reprezentare a numerelor cu semn pe 8 bii.Prin prima scdere, ne ateptm s obinem un rezultat, 105, n aceeaigam de reprezentare.117-12=117+(-12) = 01110101+11110100 = 01101001 = 10510,

    rezultat corect.117+12 = 01110101+00001100 = 10000001 = -12710,rezultat evident incorect.

    Incorectitudinea provine de la faptul c rezultatul a depitgama de reprezentare. Dac rezultatul este interpretat pe 9 bii deexemplu, gama de reprezentare devine [ ]255,256 i rezultatul va fi117+12 = 001110101+000001100 = 010000001 = 12910, rezultatcorect.

    Ca o concluzie preliminar , reinem c pentru a obinerezultate corecte este necesar sprecizm dacse lucreazsau nu cubit de semn i pe ci bii se face reprezentarea, pentru c numai nacest context interpretarea rezultatelor este corect.

    n ceea ce privete nmulirea numerelor ntregi cu semn (cu bitde semn), aici problema nu mai are o rezolvare asemntoare, nsensul c nu putem trata biii de semn la fel cu cei de reprezentare aivalorii. Astfel, procesorul studiaz biii de semn i ia o decizie n

    privina semnului rezultatului. De fapt, se realizeaz funcia logicXOR a biilor de semn. Numerele negative se vor lua n modul, iaroperaiile de nmulire se vor face numai cu numere pozitive. La final,funcie de semnul rezultatului, se ia decizia reprezentrii corecte arezultatului.

    Spre exemplu, s calculm (-25)x37. Pentru aceasta, procesorulva primi pentru procesare urmtoarele dou numere:

    [ ] [ ]10011111001010)25(37 =x

  • 8/6/2019 Carte_C_2003

    41/278

    35

    Se analizeaz separat biii de semn i se ia decizia c rezultatul va finegativ, deci, la final, se va reprezenta n complement fa de 2. Maideparte se va lucra cu 25, modulul numrului (-25), care se obine princomplementarea fa de 2 a numrului binar 1100111:

    1100111

    0011000+1=0011001Se va reine pentru procesare numai numrul (fr semn) 11001, carese va nmuli cu numrul (fr semn) 100101, obinnd, aa cum amartat mai sus, valoarea 1110011101. Mai departe, se adaug bitul desemn, 0 pentru numere pozitive, obinndu-se 01110011101. Acestultim numr se va complementa fa de 2, obinndu-se10001100010+1=[1]0001100011, adic valoarea -1024+99 = -925,valoarea corect.

    Ca o concluzie, pentru a furniza rezultate corecte, procesorul va

    trebui informat n permanen despre ce fel de numere prelucreaz (cusau fr semn) i care este lungimea lor de reprezentare (toate trebuies aib aceeai lungime).

    Reprezentarea n complement fa de 2 se poate folosi i pentrunumerele reale negative, bitul de semn fiind MSB de la partea

    ntreag. Astfel, -12.25 poate avea reprezentarea:

    1021014

    2

    210

    25.1275.03162222211.10011

    11.1001101.010.1001101.01100

    01.0110001.110025.12

    =++=++++=

    =+

    =

    Pentru nmulirea numerelor reale rmn valabile considerentelede la numere ntregi.

    n cazul de mai sus, problema reprezentrii numrului negativ afost rezolvat cu ajutorul bitului de semn dar problema reprezentriipunctului binar va avea alt rezolvare.

    2.3.3 Reprezentarea intern a numerelor realeDin considerentele de la reprezentarea extern a datelor putem

    trage alte concluzii importante din punct de vedere al reprezentriiinterne. Numerele binare ntregi fr semn au aceeai reprezentareatt extern ct i intern.

    Numerele ntregi cu semn (care n reprezentare extern suntprefixate cu ) au ca reprezentare intern un bit de semn, dar care setrateaz deosebit de ceilali bii ai reprezentrii. Toi ntregii cu semn,

    care au MSB=1, sunt reprezentai intern n complement fa de 2.

  • 8/6/2019 Carte_C_2003

    42/278

    36

    Numerele reale se pot reprezenta identic cu cele ntregi cu semn,cu o precizare: nu se face o deosebire net ntre biii reprezentriiprii ntregi i cei ai reprezentrii prii fracionare. Acest tratamentnedifereniat provine de la reprezentarea tiinific uzual cu mantis

    i exponent. Fie, spre exemplu, reprezentarea binar a numrului12.25: 410 2110001.001.110025.12 x==

    Calculatorul poate reprezenta irul de bii 110001 i reinefaptul c punctul se pune dup primii 4 bii ai reprezentrii. Acestlucru se ntmpl i n realitate. Deci, singura deosebire ntrereprezentarea numerelor reale i a celor ntregi const n faptul cnumerele reale necesit o informaie suplimentar despre aa numitulexponent, n cazul nostru numrul pozitiv 4.

    n cele ce urmeaz, vom prezenta tipurile de baz pe care le potavea datele n reprezentarea intern.

    Tipul unei date determin modul n care procesorul stocheaziprelucreaz data respectiv. Cum primele procesoare care au condus laapariia pe pia a primelor calculatoare pentru neprofesioniti (aanumiteleHome Computers) au fost procesoare capabile s prelucrezei s transmit n paralel 8 bii, a fost natural gruparea a 8 bii ntr-oentitate numitbyte.

    1B = 8b (adic un byte reprezint 8 bii)Procesoarele au evoluat, ajungndu-se n prezent la procesoarepe 64 de bii. Cum evoluia lor s-a fcut trecndu-se succesiv prinmultipli de 8 bii, s-au impus i alte entiti de reprezentare ainformaiei, pe care le vom prezenta sintetic n tabelul de mai jos.

    Denumire Dimensiune Notaie

    Nr.

    byte

    Nr.

    biti

    Denumireechivalent

    Byte 1B 8 b octet BWord 2B 16 b cuvnt WDouble_Words 4B 32 b Cuvnt dublu DW

    Quad_Words 8B 64 b Cuvnt cvadruplu QW

    Ten_Words 10B 80 b TWA determina reprezentarea intern nseamn s determinm

    lungimea reprezentrii (de obicei n multipli de octei), modul deinterpretare al biilor ce compun reprezentarea i gama de

  • 8/6/2019 Carte_C_2003

    43/278

  • 8/6/2019 Carte_C_2003

    44/278

    38

    S b 6 b 5 b 4 b 3 b 2 b 1 b 0

    B it d e s e m n

    Gama de reprezentare este cuprins ntre

    [ ]127,1281282min

    12712max7

    7

    ==

    ==

    Dac se declar tipul unsigned char, atunci nu se mai consider(interpreteaz) bitul de semn i data se consider ntreag pozitiv, ngama

    [ ]255,00min

    25512max8

    =

    ==

    Tabelele de mai sus conin codurile ASCII ale primelor 128 decaractere. Coloana D semnific valoarea zecimal (decimal) aoctetului, coloana H reprezint aceeai valoare reprezentat n formathexazecimal (baza 16) iar n coloana Sym se reprezint simbolul afiatpe monitoarele PC.

    ntregul alfabet al limbajului C se regsete n mulimea

    primelor 128 de caractere ASCII. Restul de 128 de caractere se mainumete i set de caractere extins ASCIIi poate fi vizualizat printr-unprogram simplu.

    Trebuie menionat faptul c reprezentarea datelor n formathexazecimal este foarte rspndit n tehnica programriicalculatoarelor. Avantajul reprezentrii interne a datelor n formathexazecimal const n folosirea unui numr mai mic de cifre (de 4 orimai mic dect numrul de cifre binare).

    Reprezentarea unui numr natural n format hexazecimal serealizeaz cu metoda mpririi succesive la 16 sau, mai simplu,pornind de la reprezentarea binar a numrului.

    Cum mulimea cifrelor hexa conine 16 simboluri (09 iAF), pentru codificarea celor 16 cifre avem nevoie de 4 cifre binare

    ( 1624 = ). Pentru a reprezenta un octet vom avea nevoie de 2 cifrehexazecimale i vom proceda astfel:

    - se divide octetul n dou grupe de cte 4 bii

  • 8/6/2019 Carte_C_2003

    45/278

    39

    - se nlocuiete fiecare grup de 4 bii cu cifra hexazecimal pecare o codific.

    De exemplu, s presupunem c avem numrul 217.2179208169161391001.110111011001217 01162210 =+=+==== D

    n acest mod, dac un numr are o reprezentare intern pe unnumr de koctei, se poate reprezenta simplu cu ajutorul a k2 cifrehexazecimale.

    n tabelele de mai jos se prezint codificarea ASCII acaracterelor.

    Codurile corespunztoare simbolurilor alfanumerice din tabelsunt exact semnalele binare care se transmit n reprezentarea intern.Cu alte cuvinte, dac la tastatur se tasteaz simbolul a, atunci

    circuitele corespunztoare transmit spre calculator semnale binarecorespunztoare codului 1010 0001, adic 61H sau 97 n zecimal.La fel se ntmpl cnd se lucreaz cu procesoare de text sau

    cnd se tiprete un document la imprimant. Sistemul de calculmanevreaz codurile ASCII corespunztoare literelor i cifrelor pecare utilizatorul le poate interpreta.

    D H Sym D H Sym D H Sym D H Sym0 0 Null 16 10 32 20 48 30 0

    1 1 17 11 33 21 ! 49 31 12 2 18 12 34 22 " 50 32 23 3 19 13 35 23 # 51 33 34 4 20 14 36 24 $ 52 34 45 5 21 15 37 25 % 53 35 56 6 22 16 38 26 & 54 36 67 7 23 17 39 27 ' 55 37 78 8 24 18 40 28 ( 56 38 8

    9 9 25 19 41 29 ) 57 39 910 a LF 26 1a 42 2a * 58 3a :11 b 27 1b 43 2b + 59 3b ;12 c 28 1c 44 2c , 60 3c 15 f 31 1f 47 2f / 63 3f ?

  • 8/6/2019 Carte_C_2003

    46/278

    40

    D H Sym D H Sym D H Sym D H Sym64 40 @ 80 50 P 96 60 ` 112 70 p65 41 A 81 51 Q 97 61 a 113 71 q66 42 B 82 52 R 98 62 b 114 72 r

    67 43 C 83 53 S 99 63 c 115 73 s68 44 D 84 54 T 100 64 d 116 74 t69 45 E 85 55 U 101 65 e 117 75 u70 46 F 86 56 V 102 66 f 118 76 v71 47 G 87 57 W 103 67 g 119 77 w72 48 H 88 58 X 104 68 h 120 78 x73 49 I 89 59 Y 105 69 i 121 79 y74 4a J 90 5a Z 106 6a j 122 7a z

    75 4b K 91 5b [ 107 6b k 123 7b {76 4c L 92 5c \ 108 6c L 124 7c |77 4d M 93 5d ] 109 6d M 125 7d }78 4e N 94 5e ^ 110 6e n 126 7e ~79 4f O 95 5f _ 111 6f o 127 7f

    2.3.3.2 Tipul intAcest tip se folosete pentru reprezentarea numerelor ntregi cu

    sau fr semn. Odat cu standardizarea ANSI C din 1989, s-a trecut lamodul de reprezentare a ntregilor impus de noul procesor Intel 80386dotat i cu coprocesorul matematic Intel 80387.

    S b3 0

    b0

    LS B

    MSB

    Octetul 1

    Octetul 2

    Octetul 3

    Octetul 4

    Tipul inteste identic cu signed inti utilizeaz o reprezentare pe4B a numerelor ntregi cu semn. Reprezentarea pe 4 octei duce laposibilitatea mririi gamei de reprezentare astfel:

    ( ) ( ) 933310303131

    31

    10210222222;

    2min

    12max==

    =

    =

  • 8/6/2019 Carte_C_2003

    47/278

    41

    Rezult c putem reprezenta numere ntregi n gama:

    [ ] [ ]999 102,102101475.2 unsigned intnu va mai lua n considerare bitul de semn, astfel nctreprezentarea intern este de forma din figura de mai jos. Evident,

    ( ) ( ) 933310303232 10410424242;0min

    12max==

    =

    =

    Gama de reprezentare se poate schimba cu ajutorulmodificatorilor shortsau long.

    S b14b0

    LSB

    MSB

    short intse va reprezenta pe 2B, sub forma

    [ ]32767,32768232222;2min

    12max 101051515

    15

    ==

    =

    =.

    unsigned short intva schimba gama de reprezentare n [ ]65535,0

    long intse va reprezenta pe 8B i va conduce la o gam imensde reprezentare a numerelor ntregi, lucru dovedit de

    ( ) 1818610363 102234.9108222 == unsigned long intva considera numai numere ntregi pozitive n

    gama [ ]1910844.1,0 .2.3.3.2 TipulfloatAcest tip de reprezentare este de tip real, fiind cunoscut

    i ca

    reprezentare n virgul mobil (floating point). Acest tip descriemecanismul de baz prin care se manipuleaz datele reale. Conceptulfundamental este acela de notaie tiinific, prin care orice numr sepoate exprima ca un numr zecimal (deci, cu punct zecimal)multiplicat cu o putere a lui zece sau ca un numr real binar (cu punctbinar) multiplicat cu o putere a lui 2.

    3210 210101.020101.101.10125.5 xx ===

  • 8/6/2019 Carte_C_2003

    48/278

    42

    Se observ cum stocarea n calculator a unei datefloating-pointnecesit trei pri:

    - bitul de semn (sign)- mantisa, fracia (significand)

    - exponent (exponent)Folosind formatul specific I80386, n limbajul C se disting treitipuri de date reale:

    - float, cu reprezentare pe 4 octei (32 bii, double word)- double, cu reprezentare pe 8 octei (64 bii, quad word)- long double, cu reprezentare pe 10 octei (80 bii, ten word)

    b31 b30

    b0

    LSB

    MSB

    SExponent

    biased

    Significand

    SExponent = 8bBias = 7FH=127

    Significand = 23b31 30 23 22 0

    loat

    SExponent = 11b

    Bias = 3FFH=1023

    Significand = 52b63 62 52 51 0

    double

    S Exponent = 15bBias = 3FFFH=16383

    Significand = 52b79 78 64 63 0

    longdouble

    Tipurile float i double sunt formate pentru numere reale ceexist numai n memorie. Cnd un astfel de numr este ncrcat de

    procesor n stiva pentru numere reale (flotante) pentru prelucrare sau

  • 8/6/2019 Carte_C_2003

    49/278

  • 8/6/2019 Carte_C_2003

    50/278

    44

    Exponent= 10000010 = 13010Significand= 100100000

    Valoarea real a exponentului va fi 130 - 127 = 3Biii cmpului significand se obin adugnd MSB phantom, deci

    acetia vor fi 11001000...00Numrul real care s-a stocat este:0.110010...00 x 24 = 1100.1 =12.5

    Reprezentarea intern a numrului 12.5, pe 4 octei (float), esteurmtoarea:

    0 1

    LSB

    Semn

    0 0 0 0 1 0

    0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    Cu alte cuvinte, putem spune c reprezentarea intern a numrului real12.5 este (n format hexazecimal):

    1610 414800005.12 = n cazul n care dorim s reprezentm numrul negativ 12.5, singurulbit care se va modifica va fi bitul de semn, care devine 1. Astfel,reprezentarea intern n format float a numrului negativ real 12.5este:

    1 1

    LSB

    Semn

    0 0 0 0 1 0

    0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    1610 14800005.12 C=

    Dac numrul 12.5 se reprezint n formatul double, deci pe 8octe

    i, atunci reprezentarea sa intern

    se va realiza astfel:

    - bitul de semn va fi 0

  • 8/6/2019 Carte_C_2003

    51/278

    45

    - exponentul nu va mai fi pe 8 bii ca la tipulfloat, ci pe 11 bii,deci se va schimba i bias, care va fi 1023. Atunci:

    01000000001210241026102331exponent

    =+==+ bias

    - significandva fi acelai ca la tipulfloat, dar reprezentat pe 52de bii

    0 1

    LSB

    Semn

    0 0 0 0 0 0

    0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    1610 00000040290000005.12 = Reinem c la numere reale numai bitul de semn indic dac

    numrul este pozitiv sau negativ, mantisa i exponentul se reprezint

    ca numere naturale fr bit de semn. Formatele prezentate mai susrespect standardul IEEE 754 de reprezentare a intern a numerelorreale n computere.

    Se poate pune o ntrebare legitim: de ce bias-ul n cazul floatspre exemplu este 127? Pentru a rspunde la aceast ntrebare, putemface urmtorul raionament:

    - exponentul cu semn este reprezentat pe 8 bii, deci este ngama de reprezentare [ ]127,128 + .

    - pentru a obine un exponent pozitiv, adugm numrul 128.- deoarece bitul phantom nu este reprezentat, exponentultrebuie micorat cu o unitate pentru a indica unde anume sepoziioneaz exact punctul binar.

    - Exponent pozitiv = exponent +128 1 = exponent + biasde unde rezult evident faptul cbias = 127n cazul tipuluifloat.

    n final s analizm un exemplu de procesare a produsului adou numere reale. Vrem s calculm valoarea 5.25 x 1.5. Pentru

    aceasta, vom scrie cei doi factori ai produsului n forma:

  • 8/6/2019 Carte_C_2003

    52/278

    46

    ( ) ( )[ ]

    ;

    211.10101.5.125.5

    211.1.15.1

    210101.01.10125.5

    13

    1210

    3210

    =

    ==

    ==

    +

    0111111.

    10101

    10101

    11.

    10101.

    875.7111.11120111111.5.125.5 4 === Se observ cum cmpurile exponent i significand sunt

    procesate separat, n final corelndu-se forma de reprezentare intern.

    Game de reprezentare pentru numerele reale

    Gama de reprezentare pentru fiecare din tipurile reale prezentatemai sus se calculeaz lund n considerare cel mai mare numr i celmai mic numr posibil a fi scris n respectiva reprezentare. Astfel,exponentul este decisiv pentru gama de reprezentare.

    La tipulfloat, avem

    ( ) ( ) 38361212108128max

    maxmax

    1056.2102561024256222

    128127255_exponent255_exponent

    ====

    ===

    n

    realbias

    Valoarea maxim exact, calculat fr a aproxima ca mai sus:310 10100010242 == este 38max 104028.3 =n

    ( ) ( ) ( ) 391310121010312107127min

    minmin

    10828222222

    1271270_exponent0_exponent

    ====

    ===

    n

    realbias

    Valoarea pozitiv minim exact este 39min 108775.5 =n La tipul double vom obine:

    ( ) ( ) 3073063061021041024max

    maxmax

    106.11016102416222

    102410232047_exponent2047_exponent

    ====

    ===

    n

    realbias

    Valoarea maxim exact este 308max 107.1 =n

  • 8/6/2019 Carte_C_2003

    53/278

    47

    ( ) 3061021031023minminmin

    10125.222

    102310230_exponent0_exponent

    ==

    ===

    n

    realbias

    Valoarea pozitiv minim exact este 308min 101125.1

    =n Efectund aceleai consideraii i calcule pentru tipul long double,

    vom obine

    =

    =

    4932min

    4932max

    104.3

    101.1

    n

    n

    2.3.5. Codificare BCD

    Procesorul I80386 este considerat primul procesor care are

    capacitatea de a procesa operaii aritmetice asupra unor numerereprezentate n zecimal codificat binar(BCD, binary-coded decimal) n locul formatelor binare standard. Reprezentarea numerelor n codBCD este folosit pentru a face numerele binare mai accesibileoperatorului uman. Neajunsul acestei reprezentri este faptul cnumerele BCD ocup spaiu de stocare mai mare dect numerelebinare. Ele sunt mai uor de interpretat